一、概述

Iceberg Catalog API 用来保存和查找表的元数据,比如 Schema、 属性信息等。

二、设计

2.1. Metadata Layer

Iceberg 数据表每一次的修改后的状态都会在 Metadata Layer 层中生成一个 Snapshot (s0,s1) 文件,Snapshot 文件中包含一个 Manifest List, List 中存储了当前的 Snapshot 状态是由哪些 Manifest 文件组成。每个 Manifest 的文件会指向到真实数据的存储文件 Date File(一股是 parquet 格式)。

2.2. Catalog API

Catalog API 良好的抽象来对接数据存储和元数据管理

如上图所示,Catalog 主要提供几方面的抽象。

  1. 数据 IO: File IO 都是可以定制,包括读写和删除;
  2. 元数据管理

https://zhuanlan.zhihu.com/p/389904827?utm_id=0

2.2.1. Catalog 接口

Iceberg 为了支持多种 Catalog,定义了自己的 Catalog 规范,接口 org.apache.iceberg.catalog 当引擎层(Flink/Spark)需要使用表元数据时便会通过 Catalog 进行加载,各个引擎定义了自己的 Catalog 规范(接口),Iceberg 为了和引擎层进行对接实现了引擎层定义的接口,如 FlinkCatalog/SparkCatalog。

2.2.2. SparkCatalog

Iceberg 为了和 Spark 对接,实现了 Spark 关于 Catalog 规范 SparkCatalog。

2.2.3. FlinkCatalog

Iceberg 为了和 Spark 对接,实现了 Spark 关于 Catalog 规范 FlinkCatalog。