O ClickHouse oferece suporte à integração com vários catálogos (Unity, Glue, Polaris, etc.). Neste guia, mostraremos as etapas para consultar seus dados usando o ClickHouse e o catálogo Apache Polaris. O Apache Polaris oferece suporte a tabelas Iceberg e Delta Tables (por meio de Generic Tables). No momento, esta integração oferece suporte apenas a tabelas Iceberg.
Pré-requisitos
Para se conectar ao catálogo Polaris, você precisará de:
- Snowflake Open Catalog (Polaris hospedado) ou catálogo Polaris self-hosted
- O URI do seu catálogo Polaris (por exemplo,
https://<account-id>.<region>.aws.snowflakecomputing.com/polaris/api/catalog/v1ouhttp://polaris:8181/api/catalog/v1/oauth/tokens) - Credenciais do catálogo (ID do cliente e segredo do cliente)
- O URI dos tokens OAuth da sua instância do Polaris
- Endpoint de armazenamento do armazenamento de objetos onde seus dados Iceberg estão (por exemplo, S3)
- ClickHouse versão 26.1+
Para o Open Catalog, a oferta gerenciada Polaris da Snowflake, seu URI incluirá /polaris, enquanto na versão self-hosted isso pode não ocorrer.
Criando uma conexão entre Polaris e ClickHouse
Crie um banco de dados que conecte o ClickHouse ao seu catálogo 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>'Consulte o catálogo Polaris usando o ClickHouse
Depois que a conexão estiver estabelecida, você poderá consultar o Polaris:
USE polaris_catalog;
SHOW TABLES;Para consultar uma tabela:
SELECT count(*) FROM `polaris_db.my_iceberg_table`;Para inspecionar o DDL da tabela:
SHOW CREATE TABLE `polaris_db.my_iceberg_table`;Carregando dados do Polaris para o ClickHouse
Para carregar dados do Polaris em uma tabela do ClickHouse, crie a tabela de destino com o schema desejado e depois faça a inserção a partir da tabela do Polaris:
CREATE TABLE my_clickhouse_table
(
-- defina as colunas para corresponder à sua tabela 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`;