オープンテーブル形式へのデータ書き込み
前のガイドでは、オープンテーブル形式に対してそのままクエリを実行し、高速な分析のためにデータを 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 table engine を使用してテーブルを作成します。
スキーマは、元の MergeTree テーブルと比べて単純化する必要がある点に注意してください。ClickHouse は Iceberg および基盤となる Parquet ファイルよりも豊富な型システムをサポートしていますが、Enum、LowCardinality、UInt8 のような型は Iceberg ではサポートされておらず、互換性のある型にマッピングする必要があります。
データの一部を挿入する
INSERT INTO SELECT を使用して、MergeTree テーブルから Iceberg テーブルにデータを書き込みます。この例では、ロンドンのトランザクションのみを書き込みます。
Iceberg テーブルをクエリする
データは現在、Iceberg としてオブジェクトストレージに保存されており、ClickHouse から、あるいは Iceberg を読み取れるその他のツールからクエリできます。
集計結果を書き込む
Iceberg テーブルは、生データの行を保存することだけに限定されません。集計や変換の出力、つまり ClickHouse 内で実行された ETL 処理の結果も保持できます。これは、事前計算された要約データをレイクハウスに公開し、下流の処理で利用できるようにする場合に有用です。
集約結果用の Iceberg テーブルを作成する
集計結果の挿入
町ごとの平均物件価格を計算し、その結果を直接 Iceberg に書き込みます。
集計済みテーブルをクエリする
これで、他のツールや別の ClickHouse インスタンスから、この事前計算済みデータセットを読み取れるようになりました。