一、概述

Iceberg 作为一个开放的 Table format,从设计之初就有一个高度抽象的设计,而 Table 是顶层的核心概念之一。

二、设计

在 Iceberg 中,Table 接口代表 Iceberg 表格,是一个非常重要的接口,提供了对 Iceberg Table 的元数据信息和数据文件的操作功能,使得用户可以更加方便地创建、更新、查询和读取表格中的数据。通过 Table 接口,用户可以实现更高级的表格操作,如增量更新、重写数据文件、分区以及查询等。

table

三、数据操作

四、元数据变更

TableMetadata 表示一张 Table 的元数据,Table 通过 TableOperations 和 Catalog 进行交互,查找和保存这些元数据。

五、快照

在 Iceberg 中,快照是表在某个时刻的状态,每个快照都列出了在创建快照时构成表内容的所有数据文件,数据文件存储在多个清单文件中,而快照的清单文件则在清单列表文件中被详细记录。与快照相关的设计,可以让 Iceberg 的表从容完成时间旅行、快照隔离等特性。

5.1. 时间旅行

Iceberg 文件布局会将所有历史信息都会被记录下来,可以通过 API 或者 SQL 得到过去某个时间点的 Snapshot id,做历史时刻的查询。

这里历史数据不仅仅包括数据本身信息,还包括历史的 DDL,Schema 的变更信息都可以被保存下来

Table 接口里提供了相应的方法:

六、事务

Iceberg 提供了 ACID 的语义支持,通过 Snapshot 进行读写分离,提供了 Serializable isolation,且所有的操作都可以保证原子性。

七、FileIO

FileIO 是核心 Iceberg 库和底层存储之间的主要接口,与 Hive 等组件不同的是,Iceberg 不引用目录,它追踪了表在文件级别的完整状态,通过 FileIO 可以从最顶层的元数据直达底层存储。

https://blog.csdn.net/liliwei0213/article/details/123634216