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

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

文章导航

分类入口
databasestorage
标签入口
#iceberg#delta-lake#hudi#parquet#arrow#lakehouse#object-storage#table-format#vector-search

目录

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

读者读完 列存引擎内核(ClickHouse / DuckDB 读优化)、PostgreSQL 行存 OLTPLSM 写优化引擎 之后,还缺一块:数据不在数据库进程里,而在对象存储上的一堆文件中,如何当成一张支持 ACID、更新、删除、时间旅行的表来用。这正是 lakehouse 的核心问题。

本系列不写 SQL 教程,也不写 BI 选型,写:

系列状态:已完成(2026-06-30)。全 21 篇正文均已发布,可点进阅读。

版本锚定:Parquet 与 Arrow 以格式规范(format spec)为准;表格式以 Iceberg 表规范 V2 为主线,V3 新特性(deletion vector、row lineage)单独标注;库版本 Iceberg 1.x、Delta Lake 3.x+、Hudi 1.x,源码与规范引用标注 release / spec 版本。

适合谁看

推荐阅读路径

路径 篇目 适合
数据平台工程师 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 系统掌握

一、六个关键问题

  1. 列式文件在对象存储上如何组织、又如何在读取前被裁剪? → 第 2、3、4、5 章
  2. 没有数据库进程,怎么在对象存储上做 ACID 与并发控制? → 第 6、7、11、12 章
  3. Iceberg / Delta / Hudi 的元数据模型差在哪? → 第 8–14 章
  4. 行级 update / delete 在湖上怎么实现(CoW / MoR / deletion vector)? → 第 10、12、13 章
  5. catalog、查询引擎、流式写入如何拼成一个可运维的湖仓? → 第 15、18、19、20 章
  6. 湖仓如何承接 AI / 向量负载? → 第 21 章

二、篇目依赖

flowchart TD
  A["01 Lakehouse 全景"] --> B["02 Parquet 格式"]
  B --> C["03 ORC 对照"]
  B --> D["04 Arrow 内存格式"]
  D --> E["05 列式编码与压缩"]
  A --> F["06 对象存储语义"]
  F --> G["07 表格式为何存在"]
  G --> H["08 Iceberg 元数据树"]
  H --> I["09 隐藏分区与演进"]
  H --> J["10 行级删除与 MoR"]
  H --> K["11 提交协议与并发"]
  G --> L["12 Delta 事务日志"]
  G --> M["13 Hudi Timeline"]
  J --> N["14 三者对照与互通"]
  L --> N
  M --> N
  K --> O["15 Catalog 之争"]
  I --> P["16 时间旅行与演进"]
  E --> Q["17 小文件与 Compaction"]
  N --> R["18 查询引擎如何读湖"]
  O --> R
  J --> S["19 流式写入与 CDC 入湖"]
  R --> U["21 湖上 AI 与向量"]
  R --> T["20 选型、迁移与运维"]
  S --> T

三、目录(全 21 篇)

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

  1. Lakehouse 全景:从 Hive 表到开放表格式 — Hive 目录式分区表的并发与原子提交困境,lakehouse 的「文件 + 元数据」分层,本系列要回答的问题。
  2. Parquet 文件格式深拆 — row group / column chunk / page、dictionary/RLE/bit-packing 编码、page index 与 bloom filter,谓词下推如何裁页。
  3. ORC 文件格式与 Parquet 对照 — stripe / row index、轻量索引、与 Parquet 的编码与生态取舍。
  4. Apache Arrow 内存格式与零拷贝 — buffer 布局、validity bitmap、IPC / Flight,Arrow 与 Parquet 的「内存 vs 磁盘」分工。
  5. 列式编码与压缩 — dictionary、delta、RLE 与 LZ4/ZSTD 的组合,与 列存引擎压缩 对照。

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

  1. 对象存储语义与代价 — S3 一致性模型、list 与 rename 的真实代价、multipart、与 POSIX 文件系统的关键差异。
  2. 表格式为什么存在 — 目录式分区的元数据瓶颈、缺原子提交、缺快照隔离,开放表格式用什么补上。

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

  1. Iceberg 元数据树metadata.json / manifest list / manifest / snapshot 四层结构,一次读如何收敛到文件集合。
  2. 隐藏分区与分区演进 — partition spec、transform(bucket/truncate/day)、隐藏分区如何避免分区裂脑,演进为何不重写数据。
  3. 行级删除与 Merge-on-Read — position delete vs equality delete、CoW 与 MoR 取舍、V2/V3 与 deletion vector。
  4. 提交协议与并发控制 — 元数据指针原子 swap、乐观并发与重试、REST catalog 提交语义。

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

  1. Delta Lake 事务日志_delta_log 的 JSON action 与 parquet checkpoint、protocol 版本、deletion vector 与 liquid clustering。
  2. Apache Hudi — timeline、file group / file slice、record-level index、CoW 与 MoR、compaction 与 clustering。
  3. 三者对照与互通 — Iceberg / Delta / Hudi 的元数据与更新模型对比,UniForm、XTable 等互操作方案。

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

  1. Catalog 之争 — Hive Metastore、Iceberg REST Catalog、Glue、Nessie(类 git 分支)的职责与锁语义;单列 Apache Polaris 与 Unity Catalog 开源后的最新形态与互通。
  2. 时间旅行、schema 与分区演进 — snapshot 过期与回滚、schema evolution 规则、演进对老数据的兼容边界。
  3. 小文件与 Compaction — 写入产生小文件的根因、bin-pack 与 sort / z-order / clustering、统计信息(Puffin)维护。
  4. 查询引擎如何读湖 — Trino / Spark / DuckDB / DataFusion 的 file pruning、partition pruning、列裁剪与统计下推路径对照。
  5. 流式写入与 CDC 入湖 — Flink / Kafka Connect sink、upsert 与 exactly-once、流式写入与小文件、compaction 的拉扯。
  6. 选型、迁移与运维 — 从 Hive 表迁移、benchmark 口径与陷阱、生产故障模式(孤儿文件、元数据膨胀、提交冲突)。
  7. 湖上 AI 与向量 — embedding / 特征 / 训练数据存湖,Lance 等面向向量与随机访问的格式,Iceberg/Parquet 上的向量检索与下推,与 db-frontier 的衔接边界。

四、系列联动

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

五、边界

不写 SQL / BI / 建模教程;不写云厂商托管湖仓(如各家 managed Iceberg)的内部实现;性能数据须自测或明确标注为引用来源。Iceberg V3 等尚在演进的特性按规范状态标注,不当成稳定结论。

系列 index v2,2026-06-30 — 全 21 篇规划,正文逐篇产出

同主题继续阅读

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

2026-06-30 · database / storage

【数据湖与开放表格式】表格式为什么存在

目录式分区表(Hive 表)在对象存储上有三处硬伤:并发写部分提交、list planning 太贵、缺快照隔离与原子提交。本文拆开放表格式补上的四件事——原子提交、快照隔离、文件级统计裁剪、schema 与分区演进,并抽象出三家共有的『元数据指针 + 不可变数据文件』骨架。

2026-06-30 · database / storage

【数据湖与开放表格式】Lakehouse 全景:从 Hive 表到开放表格式

Hive 目录式分区表把『表』等同于『一组目录加 metastore 里的分区行』,于是没有原子提交、planning 要 LIST 目录、schema 与分区演进常要重写。本文用这三个硬伤切入,讲清 lakehouse 把表拆成『不可变数据文件 + 可变元数据指针 + catalog』三层后各自解决了什么,并给出全系列的分层地图。

2026-06-30 · database / storage

【数据湖与开放表格式】Iceberg、Delta、Hudi 对照与互通

把前面 08–13 章拆过的 Iceberg、Delta、Hudi 放在一个坐标系里对照:元数据模型、行级更新、并发控制、引擎生态四维,每维标清口径。再讲两条互通路线——Delta UniForm(写时同步生成 Iceberg/Hudi 元数据)与 Apache XTable(事后转换元数据),以及它们的边界。最后给一棵按写入模式/引擎栈/更新频率展开的选型决策树,不做排名。


By .