一、概述

任何存储系统都是由数据和元数据组成,Iceberg 也不例外,外部系统访问存储系统需要两步:先从元数据系统中获取要访问数据的元数据,如所在的位置等信息,然后再通过元数据访问存储系统,访问实际的数据。

  1. https://juejin.cn/user/4117007604398775/posts
  2. https://blog.csdn.net/naisongwen/article/details/127594611
  3. https://blog.csdn.net/yiweiyi329/article/details/126691684
  4. https://zhuanlan.zhihu.com/p/580268765
  5. https://cloud.tencent.com/developer/article/2049105
  6. https://blog.csdn.net/weixin_47482194/article/details/116099540
  7. https://www.jianshu.com/u/f5f514c417e6
  8. https://juejin.cn/post/6975058011052048421
  9. https://juejin.cn/post/6975431686431604766
  10. https://juejin.cn/post/6992227979526930468 (delete)

二、集成

2.1. Catalog

2.1.2. Iceberg Catalog API

2.1.3. 集成

Iceberg 提供了 FlinkCatalog,用于与 Flink 集成并管理 Iceberg 表。FlinkCatalog 通过 Spark SQL 接口暴露 Iceberg 表,使得用户可以使用 Spark SQL 查询和操作 Iceberg 表。

2.2.1. DataSet

  1. RichInputFormat 接口

    FlinkInputFormat 对象,FlinkinputFormat 继承了 Flink 数据源 RichinputFormat 接口,提供了跟 Flink 集成时,操作 Iceberg 表的元数据和数据的方式~

    这是 Flink 老版数据源接口哦😯~

  2. Source 接口
    Iceberg 也提供了对接 Flink 新版 Source 接口的实现~,不过还处于 Experimental 阶段~
    https://blog.csdn.net/yiweiyi329/article/details/126691684

2.2.2. Table/SQL

IcebergTableSource 继承 Flink Connector API ScanTableSource 接口,提供了一个将 Iceberg 数据湖中的数据读取到 Flink Table 中进行处理和分析的实现。

三、读取

Iceberg 是一种开源的数据湖解決方案,它提供了一种可扩展、可靠和易于管理的数据存储和处理方式,外部系统访问 Iceberg 需要两步: 先从元数据系统中获取要访问数据的元数据,如所在的位置等信息,然后再通过元数据访问存储系统,访问实际的数据。

在 Iceberg 中 DataIterator 是一种用于迭代读取数据的接口,可以通过它来读取 Iceberg 表中的数据。

DataIterator 接口定义了以下方法:

  1. $hasNext$: 用于判断是否还有下一条记录。
  2. $next$: 用于获取下一条记录。
  3. $close$: 用于关闭迭代器并释放资源。

使用 DataIterator 读取 Iceberg 表时,需要先通过 Iceberg 的 Table API 或 Catalog API 获取到 Iceberg 表对象,然后通过该表对象的$newScan$ 方法创建一个 Scan 对象,再通过 Scan 对象的 $iterator$ 方法获取到 DataIterator 对象,最后通过 DataIterator 对象的 $next$ 方法迭代读取数据。由于 Iceberg 采用列式存储方式,可以更加高效地读取和处理大规模数据。同时,Iceberg 还支持事务、版本控制等特性,可以更加方便地管理和维护数据湖中的数据。

3.1. 元数据

FlinkCatalog 操作 Iceberg 的元数据操作基本都由 HiveCatalog 代理执行。

3.2.数据