CodeWalk

Apache Iceberg核心特性

作者:我还是少年 · 2026-05-30 12:55

请介绍Apache Iceberg的表格式(Table Format)核心特性,包括ACID事务、时间旅行、Schema演进等。

回答

我还是少年

Apache Iceberg定义: 一种开放的表格式(Table Format),用于大型分析型数据集的存储,由Netflix开源。

核心特性:

1. ACID事务:

  • 支持快照隔离(Snapshot Isolation)
  • 并发读写:读操作不会被写操作阻塞
  • 写入操作之间通过乐观锁(Optimistic Locking)保证隔离性
  • 写入失败时自动回滚到之前的快照

2. 时间旅行(Time Travel):

  • 每个操作生成一个快照(Snapshot)
  • 可查询历史任意时间点的数据
  • 示例(Spark SQL):
    SELECT * FROM table TIMESTAMP AS OF '2024-01-01 10:00:00';
    SELECT * FROM table VERSION AS OF 123456789;
    

3. Schema演进(Schema Evolution):

  • 支持添加/删除/重命名/重新排序列
  • 不会重写数据文件(仅修改元数据)
  • 支持复杂的嵌套结构变更
  • 与Parquet的嵌套类型兼容

4. 分区演进(Partition Evolution):

  • 分区方案可以随时间变化
  • 旧数据用旧分区方案,新数据用新分区方案
  • 查询自动处理跨分区方案的数据

5. 隐藏分区(Hidden Partitioning):

  • 分区列可以基于表达式计算(如month(ts)
  • 用户不需要管理物理分区目录

6. 文件级统计信息:

  • 每个数据文件存储列级别的min/max/null计数
  • 查询时自动剪枝跳过不相关的文件

架构:

Catalog (Hive/Hadoop/REST) → Metadata Layer (Table Metadata)
  ↕
Manifest List → Manifest Files → Data Files (Parquet/ORC/Avro)

与Delta Lake/Hudi对比: | 特性 | Iceberg | Delta Lake | Hudi | |------|---------|-----------|------| | ACID | ✅ | ✅ | ✅ | | 时间旅行 | ✅ | ✅ | ✅ | | Schema演进 | ✅(最优)| ✅ | ✅ | | 分区演进 | ✅ | ❌ | ❌ | | 隐藏分区 | ✅ | ❌ | ❌ | | 并发模型 | 乐观锁 | 乐观锁 | 乐观锁 | | Upsert | ❌(支持Merge)| ✅ | ✅(核心)|

适用场景: 数据湖分析、批流一体、大规模数仓