メインコンテンツへスキップ
前のガイドでは、オープンテーブルフォーマットをそのままクエリし、高速分析のためにデータを MergeTree にロードしました。多くのアーキテクチャでは、データはその逆方向、つまり ClickHouse からオープンテーブルフォーマットへ戻す形でも流す必要があります。これには、主に次の 2 つのシナリオがあります。
  • 長期ストレージへのオフロード - データはリアルタイム分析レイヤーとして ClickHouse に取り込まれ、ダッシュボードや運用レポートを支えます。データがリアルタイムの対象期間を過ぎたら、相互運用可能なフォーマットで、耐久性が高くコスト効率にも優れた長期保存を実現するために、オブジェクトストレージ内の Iceberg に書き出せます。
  • Reverse ETL - ClickHouse 内で実行した変換、集計、エンリッチメントによって、下流のツールや他チームが利用する派生データセットが生成されます。これらの結果を Iceberg テーブルに書き込むことで、より広いデータエコシステム全体で利用できるようになります。
どちらの場合でも、INSERT INTO SELECT を使うことで、ClickHouse テーブルからオブジェクトストレージに保存された Iceberg テーブルへデータを移動できます。
オープンテーブルフォーマットへの書き込みは、現在 Iceberg テーブルのみ をサポートしています。Delta Lake テーブルの部分的なサポートは現在開発中です。テーブルをカタログで管理していてはなりません。

ソースデータセットを準備する

このガイドでは、UK Price Paid データセット (イングランドとウェールズにおけるすべての住宅不動産取引を記録した公開データ) を使用します。

MergeTreeテーブルを作成してデータを投入する

公開CSVソースからテーブルに直接データを取り込みます:

Icebergテーブルにデータを書き込む

Iceberg テーブルを作成する

Iceberg にデータを書き込むには、IcebergS3 テーブルエンジンを使用してテーブルを作成します。 なお、スキーマは MergeTree の元テーブルに比べて簡略化する必要があります。ClickHouse は Iceberg や基盤となる Parquet ファイルよりも豊富な型システムをサポートしているため、EnumLowCardinalityUInt8 などの型は Iceberg ではサポートされておらず、互換性のある型にマッピングする必要があります。

データの一部を挿入する

INSERT INTO SELECT を使用して、MergeTree テーブルから Iceberg テーブルへデータを書き込みます。この例では、ロンドンの取引だけを書き込みます。

Icebergテーブルをクエリする

データは現在、オブジェクトストレージに Iceberg 形式で保存されており、ClickHouse や Iceberg を読み取るその他のツールからクエリできます。

集計結果を書き込む

Iceberg テーブルは、生データの行を保存するだけに限りません。集計や変換の出力、つまり ClickHouse 内で実行される ETL プロセスの結果も保持できます。これは、事前計算したサマリーを レイクハウス に公開し、下流のシステムで利用できるようにする際に役立ちます。

集計用のIcebergテーブルを作成する

集計データを挿入

町ごとの平均不動産価格を算出し、その結果をIcebergに直接書き込みます:

集計テーブルにクエリを実行する

これで、他のツールや別のClickHouseインスタンスから、この事前計算済みのデータセットを参照できるようになります。
最終更新日 2026年7月2日