ClickHouse поддерживает интеграцию с несколькими каталогами (Unity, Glue, Polaris, и т. д.). В этом руководстве мы покажем, как выполнять запросы к данным с помощью ClickHouse и каталога Apache Polaris. Apache Polaris поддерживает таблицы Iceberg и таблицы Delta (через Generic Tables). На данный момент эта интеграция поддерживает только таблицы Iceberg.
Предварительные требования
Для подключения к каталогу Polaris вам понадобятся:
- Snowflake Open Catalog (хостируемый Polaris) или самоуправляемый каталог Polaris
- URI вашего каталога Polaris (например,
https://<account-id>.<region>.aws.snowflakecomputing.com/polaris/api/catalog/v1илиhttp://polaris:8181/api/catalog/v1/oauth/tokens) - Учетные данные каталога (client ID и client secret)
- URI OAuth-токенов для вашего экземпляра Polaris
- Конечная точка объектного хранилища, где находятся ваши данные Iceberg (например, S3)
- ClickHouse версии 26.1+
В случае Open Catalog, управляемого сервиса Polaris от Snowflake, ваш 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>'Выполнение запросов к каталогу Polaris с помощью ClickHouse
После настройки подключения вы можете выполнять запросы к 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, создайте целевую таблицу с нужной схемой, а затем вставьте в нее данные из таблицы 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`;