配置 Iceburg Catalog外部表

面向Iceberg REST Catalog的配置方法

Apache Iceberg 是一种面向数据湖的表格式,同时提供了与之配套的 Catalog 接口。Iceberg 定义了数据湖表的存储结构和管理机制,用于支持大规模、复杂数据操作。它为分区、数据更新、时间旅行、快照等提供了优化方案。Iceberg 的 Catalog 负责管理多个表的元数据,提供表发现和管理操作的入口。不同的 Catalog 实现 (如 Hive Metastore、REST、Glue 等) 可以用来存储和检索表的元数据,支持跨环境及引擎一致管理表。

ProtonBase 可以通过外部表方式与 Iceberg REST Catalog 元数据对接,实现查询加速和数据导入和导出。

安装扩展

安装extension,仅需要安装一次,如果已经安装过,可以忽略。

CREATE EXTENSION iceberg_fdw;

创建Iceberg REST Catalog外部服务器

CREATE SERVER <server_name> FOREIGN DATA WRAPPER iceberg_fdw
OPTIONS (
 endpoint '<endpoint_url>',
 catalog '<catalog_name>'
);
  • endpoint, Iceberg Catalog 对外服务的 API
  • catalog, 数据表格文件的根目录
-- 示例
CREATE SERVER iceberg_server FOREIGN DATA WRAPPER iceberg_fdw
OPTIONS (
 endpoint 'http://localhost:8181/api/catalog',
 catalog 'manual_spark'
);

创建用户映射

为本地用户账号授予对应的对象存储的访问权限。

CREATE USER MAPPING FOR public SERVER iceberg_server
OPTIONS (
 token 'principal:root;realm:default-realm'
);

创建外表

- 将iceberg_namespace下的t1表创建为外表,元数据保存在public schema下。
IMPORT FOREIGN SCHEMA iceberg_namespace
	LIMIT TO (t1) FROM SERVER iceberg_server INTO public;
 
- 查询 Iceberg 表
SELECT COUNT(1) FROM t1;
 
- 写入到 Iceberg 表
INSERT INTO t1 SELECT ...;