Polaris 카탈로그

Polaris 카탈로그 (Polaris catalog)

Apache Polaris Catalog를 ClickHouse에 연결해 Iceberg 테이블을 조회하는 방법을 살펴봐요.

출처: 문서

본문

ClickHouse는 여러 카탈로그(Unity, Glue, Polaris 등)와의 통합을 지원해요. 이 가이드에서는 ClickHouse와 Apache Polaris Catalog를 사용해 데이터를 조회하는 단계를 안내할게요. Apache Polaris는 Iceberg 테이블과 Delta 테이블(Generic Tables를 통해)을 지원해요. 이 통합은 현재 Iceberg 테이블만 지원해요.

이 기능은 실험적이므로 SET allow_experimental_database_unity_catalog = 1;을 사용해 활성화해야 해요.

사전 조건

Polaris 카탈로그에 연결하려면 다음이 필요해요:

  • Snowflake Open Catalog(호스팅 Polaris) 또는 자체 호스팅 Polaris Catalog
  • Polaris 카탈로그 URI(예: https://<account-id>.<region>.aws.snowflakecomputing.com/polaris/api/catalog/v1 또는 http://polaris:8181/api/catalog/v1/oauth/tokens)
  • 카탈로그 자격 증명(클라이언트 ID와 클라이언트 시크릿)
  • Polaris 인스턴스의 OAuth 토큰 URI
  • Iceberg 데이터가 있는 오브젝트 스토어의 스토리지 엔드포인트(예: S3)
  • ClickHouse 버전 26.1+

Open Catalog(Snowflake의 관리형 Polaris 제공)의 경우 URI에 /polaris가 포함되지만 자체 호스팅에서는 포함되지 않을 수 있어요.

1. 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>'

2. ClickHouse로 Polaris 카탈로그 조회하기

연결이 있으면 Polaris를 조회할 수 있어요:

USE polaris_catalog;
SHOW TABLES;

테이블을 조회하려면:

SELECT count(*) FROM `polaris_db.my_iceberg_table`;

예를 들어 schema.table처럼 백틱이 필요해요.

테이블 DDL을 검사하려면:

SHOW CREATE TABLE `polaris_db.my_iceberg_table`;

3. Polaris에서 ClickHouse로 데이터 로드하기

Polaris에서 ClickHouse 테이블로 데이터를 로드하려면 원하는 스키마로 대상 테이블을 만들고, Polaris 테이블에서 삽입해요:

CREATE TABLE my_clickhouse_table
(
    -- define columns to match your Iceberg table
    `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`;

더 알아보기 (Learn more)