土法炼钢兴趣小组的算法知识备份

数据湖与开放表格式 — 系列规划

目录

数据湖与开放表格式 — 系列规划

本文是写作规划,不是可发布正文。拆解对象分两层:列式文件格式(Parquet 主、ORC/Arrow 对照)与开放表格式(Iceberg 主线,Delta / Hudi 对照)。不写 SQL/BI 教程,不写云厂商托管湖仓内部实现。

关联文档:index.md(读者入口)。本文件聚焦逐章大纲、来源台账、实验台账与写作顺序。


一、为什么写这个系列

1.1 数据库栈的缺口

已有内容 引擎/视角 落点
postgresql-kernel/ (26) 行存 OLTP B-Tree + MVCC + WAL
db/mysql-innodb/ (20) 行存 OLTP InnoDB 页/Redo/Undo
db/lsm-tree/ (9) 写优化 KV MemTable + SSTable + Compaction
db/columnar-engine/ (16) 读优化列存 ClickHouse MergeTree / DuckDB
storage/ (79) 通用存储原理 含对象存储但未落到表格式
db-frontier/ (25) AI 原生 DB 前沿 向量/HTAP,非表格式内核

结论:读者掌握了「数据在引擎进程里」的行存、写优化、列存之后,缺的是另一种范式——数据以文件形式躺在对象存储上,靠一层独立的「表格式」元数据获得 ACID、更新、快照、时间旅行。这正是 lakehouse 的内核问题,目前全站没有系统拆解。

1.2 为什么选 Iceberg(主)+ Delta / Hudi(对照)

维度 Iceberg Delta Lake Hudi
元数据模型 不可变 snapshot + manifest 树 顺序事务日志 _delta_log timeline + file group
规范开放度 表规范 + REST Catalog 规范公开 协议公开,生态偏 Spark/Databricks 协议公开,生态偏流式 upsert
行级更新 position/equality delete、V3 deletion vector deletion vector CoW / MoR + record index
引擎中立性 最强(Trino/Spark/Flink/DuckDB/CH) 较强(UniForm 补互通) 偏自带写入栈
系列篇幅 主线 4 章(08–11) 对照 1 章(12) 对照 1 章(13)

选 Iceberg 作主线:规范最完整、引擎最中立、2024–2026 事实上的收敛点;Delta/Hudi 各一章讲清「同一问题的不同解法」,第 14 章做对照与互通(UniForm / XTable)。

1.3 系列定位

Lakehouse = 列式文件格式 + 对象存储语义 + 表格式元数据 + catalog + 查询引擎

不写 SQL 教程,写:


二、核心问题与目标读者

2.1 六个关键问题

  1. 列式文件在对象存储上如何组织、又如何在读取前被裁剪? → 第 2、3、4、5 章:row group / page、column index、bloom filter、谓词与投影下推。

  2. 没有数据库进程,怎么在对象存储上做 ACID 与并发控制? → 第 6、7、11、12 章:S3 语义、原子指针 swap、乐观并发、事务日志。

  3. Iceberg / Delta / Hudi 的元数据模型差在哪? → 第 8–14 章:snapshot 树 vs 顺序日志 vs timeline。

  4. 行级 update / delete 在湖上怎么实现? → 第 10、12、13 章:CoW、MoR、position/equality delete、deletion vector、record index。

  5. catalog、查询引擎、流式写入如何拼成可运维的湖仓? → 第 15、18、19、20 章:catalog 语义、引擎下推、CDC 入湖、运维故障模式。

  6. 湖仓如何承接 AI / 向量负载? → 第 21 章:训练数据存湖、Lance 等向量优化格式、湖上向量检索边界。

2.2 目标读者


三、篇目结构(全 21 篇)

第一部分:列式文件格式(第 1–5 章)

第 1 章:Lakehouse 全景:从 Hive 表到开放表格式

第 2 章:Parquet 文件格式深拆

第 3 章:ORC 文件格式与 Parquet 对照

第 4 章:Apache Arrow 内存格式与零拷贝

第 5 章:列式编码与压缩

第二部分:对象存储与 ACID 基础(第 6–7 章)

第 6 章:对象存储语义与代价

第 7 章:表格式为什么存在

第三部分:Iceberg 内核(第 8–11 章)

第 8 章:Iceberg 元数据树

第 9 章:隐藏分区与分区演进

第 10 章:行级删除与 Merge-on-Read

第 11 章:提交协议与并发控制

第四部分:Delta 与 Hudi(第 12–14 章)

第 12 章:Delta Lake 事务日志

第 13 章:Apache Hudi

第 14 章:三者对照与互通

第五部分:治理、引擎、集成与前沿(第 15–21 章)

第 15 章:Catalog 之争

第 16 章:时间旅行、schema 与分区演进

第 17 章:小文件与 Compaction

第 18 章:查询引擎如何读湖

第 19 章:流式写入与 CDC 入湖

第 20 章:选型、迁移与运维

第 21 章:湖上 AI 与向量


四、依赖关系

1 → 2 → 3
    2 → 4 → 5
1 → 6 → 7 → 8 → 9
                8 → 10 → 11
            7 → 12
            7 → 13
10,12,13 → 14
11 → 15
9 → 16
5 → 17
14,15 → 18
10 → 19
18,19 → 20
2,8,18 → 21

五、阅读路径

路径 篇目 适合
数据平台工程师 1→2→8→17→18→20 端到端建湖
从 OLAP / 列存来 2→4→8→10→14 文件格式衔接表格式
流式 / 实时入湖 1→8→10→19 CDC 与小文件
表格式选型 1→8→12→13→14→15 Iceberg/Delta/Hudi 取舍
湖上 AI / 向量 2→8→18→21 把湖当训练/检索底座
完整通读 1→…→21 系统掌握

六、来源台账

A 级

B 级

禁止


七、实验台账

环境 | 本机:pyarrow / pyiceberg / Spark / DuckDB / Trino / Flink;对象存储用 MinIO 或本地 FS;逐篇交代 CPU、内存、OS、组件版本 |
实验
2 Parquet footer / page index / bloom filter dump
3 ORC vs Parquet 结构与体积对照
4 Arrow C Data Interface 零拷贝传递
5 编码+压缩组合的体积/读取耗时(≥3 轮中位数)
6 MinIO 上 LIST 与 rename 代价随对象数变化
8 Iceberg metadata.json/manifest 逐层 dump
9 分区演进前后文件 partition 数据
10 MoR delete file vs CoW 重写量
11 并发提交冲突与重试
12 Delta _delta_log JSON/checkpoint 解读
13 Hudi MoR upsert 与 compaction
17 小文件 compaction 前后文件数与 planning 耗时
18 Trino vs DuckDB 扫描文件数对比
19 Flink 流式写 Iceberg 的提交频率与小文件
21 Lance vs Parquet 顺序扫描与随机点查耗时

每个 benchmark 交代:CPU、内存、OS、组件版本、数据集规模、采样轮次(≥3,取中位数),外部数据明确标注引用。


八、系列联动

系列 联动
db/columnar-engine/ 向量化执行、编码压缩、Parquet 与 MergeTree 文件格式对照
storage/ 对象存储、压缩、冷热分层
db-frontier/ 向量引擎、HTAP、湖上 AI 负载
distributed/ 一致性模型、乐观并发与原子提交
db/postgresql-kernel/db/mysql-innodb/ 行存 MVCC 对照「湖上 ACID」

九、边界

不承诺

承诺


十、写作顺序

  1. index.md(已完成)
  2. 第 1 章(全景,不依赖实测,先开篇)
  3. 第 2、3、4、5 章(文件格式层,基础阻塞最多)
  4. 第 6、7 章(对象存储与表格式动机)
  5. 第 8、9、10、11 章(Iceberg 主线)
  6. 第 12、13、14 章(Delta/Hudi 对照与互通)
  7. 第 15、16、17 章(catalog 与治理)
  8. 第 18、19、20 章(引擎、流式、运维收束)
  9. 第 21 章(湖上 AI 与向量,前沿收尾,可在 18 完成后并行)

十一、已确认决策(2026-06-30)

  1. 版本锚定:Iceberg 1.x + 表规范 V2 主线、V3 特性标注,确认采用。
  2. Hudi:保持 1 章(第 13 章),不扩成 2 章。
  3. 流式边界:第 19 章只讲「入湖侧」(sink、exactly-once 提交、CDC upsert、小文件),流处理引擎本身的窗口/状态/容错留给未来可能的独立「流处理」系列,不在本系列展开。
  4. catalog:第 15 章单列 Apache Polaris 与 Unity Catalog 开源后的最新形态,其余 catalog 作对比背景。
  5. 湖上 AI / 向量:新增第 21 章作为前沿收尾,只讲湖侧存储与读取(含 Lance),向量索引算法仍归 db-frontier

系列规模由此定为 21 篇


规划版本:v2,2026-06-30(全 21 篇,待确认问题已闭环) 目录:post/db/lakehouse/

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-29 · database / storage

【数据湖与开放表格式】Parquet · Iceberg · Delta · Hudi 内核拆解

拆解 lakehouse 的两层基础:列式文件格式(Parquet/ORC/Arrow)与开放表格式(Iceberg/Delta/Hudi)。讲清没有数据库进程时,如何在对象存储上做 ACID、行级更新、快照与并发,以及 catalog、查询引擎、流式入湖如何拼成可运维的湖仓。面向数据平台工程师与从 OLAP/数仓转型的开发者。


By .