Iceberg Catalog
- RFC PR: datafuselabs/databend#8215
- Tracking Issue: datafuselabs/databend#8216
概述
Iceberg 是数据湖仓中广泛支持的表格式。 本 RFC 描述了 iceberg 外部目录的行为以及我们将如何实现它。
动机
Apache Iceberg 是一种广泛用于数据湖仓的表格式,它提供了更完整的逻辑数据库视图,并且在作为外部表访问时具有更高的性能,因为用户不需要了解分区,并且在访问时通过文件的索引较少,相比Hive
。
Iceberg
的分裂和结构化也使得数据源的并发访问和版本管理更加安全、节省和方便。
支持 Iceberg 将使 databend 成为一个开放的数据湖,赋予其更多的 OLAP 能力。
指南级解释
创建 Iceberg Catalog
要使用 Iceberg 目录,用户需要建立一个具有必要权限的 iceberg 存储。然后他们可以在其上创建一个catalog
。
CREATE CATALOG my_iceberg
TYPE="iceberg"
URL='s3://path/to/iceberg'
CONNECTION=(
ACCESS_KEY_ID=...
SECRET_ACCESS_KEY=...
...
)
访问 Iceberg 表的内容
SELECT * FROM my_iceberg.iceberg_db.iceberg_tbl;
在普通表和 Iceberg 表上的联合查询:
SELECT normal_tbl.book_name,
my_iceberg.iceberg_db.iceberg_tbl.author
FROM normal_tbl,
iceberg_tbl
WHERE normal_tbl.isbn = my_iceberg.iceberg_db.iceberg_tbl.isbn
AND iceberg_tbl.sales > 100000;
在操作表时,所有数据仍然保留在用户提供的端。
时间回溯
Iceberg 提供了一系列快照及其时间戳。在其上进行时间回溯是自然的。
SELECT ...
FROM <iceberg_catalog>.<database_name>.<table_name>
AT ( { SNAPSHOT => <snapshot_id> | TIMESTAMP => <timestamp> } );
访问快照元数据
用户应该能够在目录中查找快照 ID 列表:
SELECT snapshot_id FROM ICEBERG_SNAPSHOT(my_iceberg.iceberg_db.iceberg_tbl);
snapshot_id
---------------------
1234567890123456789
1234567890123456790
(2 rows)
外部表当前读取的快照 ID 将始终是最新的。但用户可以使用AT
进行时间回溯。
参考级解释
一个新的目录类型ICEBERG
,以及用于从 Iceberg 存储读取数据的表引擎。
表引擎
该表引擎使用户能够从已建立的 Apache Iceberg 端点读取数据。外部表的所有表内容和元数据应保留在用户提供的 Iceberg 数据源中,以 Iceberg 的方式。
该引擎将跟踪最后提交的快照,并且应该能够从前快照读取。