ClickHouse は、複数のカタログ (Unity、Glue、Polaris など) とのインテグレーションをサポートしています。このガイドでは、ClickHouse を介して Lakehouse runtime catalog (別名 BigLake Metastore) 内の Iceberg テーブルをクエリする手順を説明します。
前提条件
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 用の storage スコープ) で OAuth フローを完了して取得した リフレッシュ トークン - warehouse パス: テーブルが保存されている 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`;テーブル定義を確認するには:
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 に対してクエリを実行します。必要に応じて INSERT INTO ... SELECT を再実行し、BigLake のデータを更新してください。