ClickHouse 支持与多个目录 (Unity、Glue、Polaris 等) 集成。本指南将逐步介绍如何使用 ClickHouse 和 Apache Polaris Catalog 查询您的数据。 Apache Polaris 支持 Iceberg 表和 Delta Tables (通过 Generic Tables) 。目前,此集成仅支持 Iceberg 表。
前置条件
要连接到 Polaris 目录,您需要具备:
- Snowflake Open Catalog (托管的 Polaris) 或自托管的 Polaris 目录
- 您的 Polaris 目录 URI (例如,
https://<account-id>.<region>.aws.snowflakecomputing.com/polaris/api/catalog/v1或http://polaris:8181/api/catalog/v1/oauth/tokens) - Catalog 凭据 (client ID 和 client secret)
- 您的 Polaris 实例的 OAuth 令牌 URI
- 存储 Iceberg 数据的对象存储端点 (例如 S3)
- ClickHouse 26.1+ 版本
对于 Open Catalog (Snowflake 托管的 Polaris 服务) ,URI 会包含 /polaris;而对于自托管部署,则可能不包含。
在 Polaris 和 ClickHouse 之间创建连接
创建一个数据库,将 ClickHouse 连接到您的 Polaris 目录:
CREATE DATABASE polaris_catalog
ENGINE = DataLakeCatalog('https://<catalog_uri>/api/catalog/v1')
SETTINGS
catalog_type = 'rest',
catalog_credential = '<client-id>:<client-secret>',
warehouse = 'snowflake',
auth_scope = 'PRINCIPAL_ROLE:ALL',
oauth_server_uri = 'https://<catalog_uri>/api/catalog/v1/oauth/tokens',
storage_endpoint = '<storage_endpoint>'使用 ClickHouse 查询 Polaris 目录
连接建立后,您可以查询 Polaris:
USE polaris_catalog;
SHOW TABLES;要查询某个表:
SELECT count(*) FROM `polaris_db.my_iceberg_table`;要查看表的 DDL:
SHOW CREATE TABLE `polaris_db.my_iceberg_table`;将 Polaris 中的数据加载到 ClickHouse
要将 Polaris 中的数据加载到 ClickHouse 表中,请先按所需的 schema 创建目标表,然后从 Polaris 表中插入数据:
CREATE TABLE my_clickhouse_table
(
-- 定义与您的 Iceberg 表匹配的列
`id` Int64,
`name` String,
`event_time` DateTime64(3)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO my_clickhouse_table
SELECT * FROM polaris_catalog.`polaris_db.my_iceberg_table`;