数据湖-Iceberg-源码学习-Table 设计
一、概述
Iceberg 作为一个开放的 Table format,从设计之初就有一个高度抽象的设计,而 Table 是顶层的核心概念之一。
二、设计
在 Iceberg 中,Table 接口代表 Iceberg 表格,是一个非常重要的接口,提供了对 Iceberg Table 的元数据信息和数据文件的操作功能,使得用户可以更加方便地创建、更新、查询和读取表格中的数据。通过 Table 接口,用户可以实现更高级的表格操作,如增量更新、重写数据文件、分区以及查询等。

三、数据操作
四、元数据变更
TableMetadata 表示一张 Table 的元数据,Table 通过 TableOperations 和 Catalog 进行交互,查找和保存这些元数据。
五、快照
在 Iceberg 中,快照是表在某个时刻的状态,每个快照都列出了在创建快照时构成表内容的所有数据文件,数据文件存储在多个清单文件中,而快照的清单文件则在清单列表文件中被详细记录。与快照相关的设计,可以让 Iceberg 的表从容完成时间旅行、快照隔离等特性。
5.1. 时间旅行
Iceberg 文件布局会将所有历史信息都会被记录下来,可以通过 API 或者 SQL 得到过去某个时间点的 Snapshot id,做历史时刻的查询。
这里历史数据不仅仅包括数据本身信息,还包括历史的 DDL,Schema 的变更信息都可以被保存下来
Table 接口里提供了相应的方法:
六、事务
Iceberg 提供了 ACID 的语义支持,通过 Snapshot 进行读写分离,提供了 Serializable isolation,且所有的操作都可以保证原子性。
- https://baijiahao.baidu.com/s?id=1730162628824294760&wfr=spider&for=pc
- https://zhuanlan.zhihu.com/p/578466765
七、FileIO
FileIO 是核心 Iceberg 库和底层存储之间的主要接口,与 Hive 等组件不同的是,Iceberg 不引用目录,它追踪了表在文件级别的完整状态,通过 FileIO 可以从最顶层的元数据直达底层存储。











