要点データレイクのテーブルをクエリし、MergeTree で高速化して、その結果を Iceberg に書き戻すまでを実践的に紹介します。すべての手順で公開データセットを使用し、Cloud と OSS の両方で動作します。
1
Iceberg データを直接クエリする
最も手早く始めるには、icebergS3() テーブル関数を使います。S3 上の Icebergテーブルを指定すれば、セットアップ不要ですぐにクエリできます。スキーマを確認します:deltaLake()、hudi()、paimon() でも使用できます。詳細はこちら: オープンテーブルフォーマットの直接クエリ では、4 つのフォーマットすべてに加え、分散読み取り向けのクラスター バリアントやストレージバックエンドのオプション (S3、Azure、HDFS、local) について説明しています。2
3
カタログに接続する
ほとんどの organizations では、テーブルメタデータとデータの検出を一元化するために、データカタログを介して Iceberg テーブルを管理します。ClickHouse は、DataLakeCatalog データベースエンジンを使用してカタログに接続し、カタログ内のすべてのテーブルを ClickHouse のデータベースとして公開できます。こちらのほうがスケーラブルな方法であり、新しい Iceberg テーブルが作成されても、追加作業なしで常に ClickHouse からアクセスできます。以下は、AWS Glue に接続する例です。ClickHouse はネイティブで複数のネームスペースをサポートしていないため、
<database>.<table> はバッククォートで囲む必要があります。4
クエリを実行する
上記で使用した方法が table function、table engine、カタログのいずれであっても、同じ ClickHouse SQL をそのまま使用できます。FROM 句だけです。データソースが変わっても、ClickHouse SQL のすべての関数、JOIN、集計は同じように使用できます。5
ClickHouse にデータの一部を読み込む
Iceberg を直接クエリするのは便利ですが、パフォーマンスはネットワークスループットとファイルレイアウトに左右されます。分析用途では、データをネイティブな MergeTree テーブルに読み込んでください。まず、Iceberg テーブルに対してフィルタしたクエリを実行し、ベースラインを確認します。counterid フィルターを認識しないため、S3 内のデータセット全体がスキャンされます。数秒かかることがあります。次に、MergeTree テーブルを作成してデータを読み込みます。counterid は ORDER BY キーの先頭カラムであるため、ClickHouse のスパースプライマリインデックスは該当するグラニュールまで直接絞り込み、1 億行すべてをスキャンする代わりに counterid = 38 の行だけを読み取ります。その結果、処理速度が大幅に向上します。分析の高速化 ガイドでは、LowCardinality 型、全文索引、最適化された順序キーをさらに活用し、2 億 8300 万行のデータセットで 約 40 倍の高速化 を実証しています。詳細はこちら: MergeTree による分析の高速化 では、スキーマ最適化、全文索引、そしてパフォーマンスの比較を導入前後で包括的に解説しています。6
Iceberg への書き戻し
ClickHouse は Iceberg テーブルにデータを書き戻すこともできるため、リバース ETL ワークフローを実現できます。これにより、集計結果やデータの一部を公開し、他のツール (Spark、Trino、DuckDB など) で利用できるようになります。出力先となる Iceberg テーブルを作成します。次のステップ
- 直接クエリを実行する — 4 つのフォーマットすべて、クラスターのバリエーション、テーブルエンジン、キャッシュ
- カタログに接続する — Delta と Iceberg を使った Unity Catalog の完全なチュートリアル
- 分析を高速化する — スキーマの最適化、インデックス化、約 40 倍の高速化デモ
- データレイクに書き込む — 生データの書き込み、集計データの書き込み、型マッピング
- サポートマトリクス — フォーマットとストレージバックエンドごとの機能比較