BigLake Metastore 카탈로그 연동하기

BigLake Metastore 카탈로그 연동하기

ClickHouse를 Lakehouse runtime catalog(BigLake Metastore)에 연결해서 Iceberg 테이블을 쿼리하는 방법을 배워 봐요. 이 가이드에서는 Unity, Glue, Polaris 등 여러 카탈로그와의 통합을 지원하는 ClickHouse가 어떻게 Google Cloud의 BigLake Metastore와 연동되는지 단계별로 살펴봐요.

출처: 문서

본문

ClickHouse는 여러 카탈로그(Unity, Glue, Polaris 등)와의 통합을 지원해요. 이 가이드에서는 Lakehouse runtime catalog aka BigLake Metastore에 있는 Iceberg 테이블을 ClickHouse를 통해 쿼리하는 단계를 안내해요.

이 기능은 베타이므로, 다음을 사용해 활성화해야 해요:

SET allow_database_iceberg = 1;

사전 준비 사항 (Prerequisites)

ClickHouse에서 Lakehouse runtime catalog(BigLake Metastore)로 연결을 만들기 전에 다음이 준비되어 있어야 해요:

  • Lakehouse runtime catalog가 활성화된 Google Cloud 프로젝트
  • Google Cloud Console에서 만든 애플리케이션용 Application Default credentials(OAuth 클라이언트 ID와 클라이언트 시크릿)
  • 적절한 스코프(예: https://www.googleapis.com/auth/bigquery와 GCS용 스토리지 스코프)로 OAuth 흐름을 완료해 얻은 리프레시 토큰
  • 웨어하우스 경로: 테이블이 저장된 GCS 버킷(및 선택적 접두사), 예: gs://your-bucket 또는 gs://your-bucket/prefix

Lakehouse runtime catalog와 ClickHouse 간 연결 만들기

OAuth 자격 증명이 준비되면 DataLakeCatalog 데이터베이스 엔진을 사용하는 데이터베이스를 ClickHouse에 만들어요:

SET allow_database_iceberg = 1;

CREATE DATABASE lakehouse_runtime_catalog
ENGINE = DataLakeCatalog('https://biglake.googleapis.com/iceberg/v1/restcatalog')
SETTINGS
    catalog_type = 'biglake',
    google_adc_client_id = '<client-id>',
    google_adc_client_secret = '<client-secret>',
    google_adc_refresh_token = '<refresh-token>',
    google_adc_quota_project_id = '<gcp-project-id>',
    warehouse = 'gs://<bucket_name>/<optional-prefix>';

ClickHouse로 Lakehouse runtime catalog 테이블 쿼리하기

연결이 만들어지면 Lakehouse runtime catalog에 등록된 테이블을 쿼리할 수 있어요.

USE LAKEHOUSE_RUNTIME_CATALOG;

SHOW TABLES;

출력 예시:

┌─name──────────────────────────────────────┐
│lakehouse_runtime_catalog.my_iceberg_table │   
└───────────────────────────────────────────┘
SELECT count(*) FROM `lakehouse_runtime_catalog.my_iceberg_table`;

백틱이 필요해요 — ClickHouse는 네임스페이스를 두 개 이상 지원하지 않기 때문에 백틱이 필요해요.

테이블 정의를 확인하려면:

SHOW CREATE TABLE `lakehouse_runtime_catalog.my_iceberg_table`;

Lakehouse에서 ClickHouse로 데이터 로드하기

반복적인 쿼리를 더 빠르게 하기 위해 Lakehouse runtime catalog 테이블의 데이터를 로컬 ClickHouse 테이블로 로드하려면, MergeTree 테이블을 만들고 카탈로그에서 삽입해요:

CREATE TABLE clickhouse_table
(
    `id` Int64,
    `event_time` DateTime64(3),
    `user_id` String,
    `payload` String
)
ENGINE = MergeTree
ORDER BY (event_time, id);

INSERT INTO local_events
SELECT * FROM lakehouse_runtime_catalog.`icebench.my_iceberg_table`;

초기 로드 후에는 더 낮은 지연 시간으로 clickhouse_table을 쿼리해요. BigLake에서 데이터를 갱신해야 할 때는 INSERT INTO ... SELECT를 다시 실행해요.

더 알아보기 (Learn more)