Apache Iceberg核心特性
请介绍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)| ✅ | ✅(核心)|
适用场景: 数据湖分析、批流一体、大规模数仓