オープンテーブル形式へのデータの書き込み
前のガイドでは、オープンテーブル形式をそのままクエリし、高速な分析のためにデータをMergeTreeに取り込みました。多くのアーキテクチャでは、データは逆方向にも流れる必要があります。つまり、ClickHouseからレイクハウス形式へデータを書き戻す必要があります。これを必要とする代表的なシナリオは、次の 2 つです。
- 長期ストレージへのオフロード - データはリアルタイム分析レイヤーとしてClickHouseに取り込まれ、ダッシュボードや運用レポートを支えます。データがリアルタイム用途の保持期間を過ぎたら、相互運用可能な形式で、耐久性が高くコスト効率に優れた長期保存を実現するために、オブジェクトストレージ内のIcebergに書き出すことができます。
- リバースETL - ClickHouse内で実行した変換、集約、エンリッチメントによって、下流ツールや他チームが利用する派生データセットが生成されます。これらの結果をIcebergテーブルに書き込むことで、より広範なデータエコシステム全体で利用できるようになります。
どちらの場合も、INSERT INTO SELECT を使用すると、ClickHouseテーブルからオブジェクトストレージに保存されたIcebergテーブルへデータを移動できます。
オープンテーブル形式への書き込みは、現在 Icebergテーブルのみ をサポートしています。Delta Lakeテーブルの部分的なサポートは現在開発中です。テーブルはカタログ管理されていてはなりません。
ソースデータセットを準備する
このガイドでは、UK Price Paid データセット (イングランドおよびウェールズにおけるすべての住宅用不動産取引の公開記録) を使用します。
MergeTreeテーブルを作成してデータを投入する
公開されているCSVソースからテーブルに直接データを投入します。
Iceberg テーブルにデータを書き込む
Iceberg テーブルを作成する
Iceberg にデータを書き込むには、IcebergS3 テーブルエンジン を使用してテーブルを作成します。
スキーマは、MergeTree のソースと比べて簡略化する必要がある点に注意してください。ClickHouse は Iceberg や基盤となる Parquet ファイルよりも豊富な型システムをサポートしているため、Enum、LowCardinality、UInt8 などの型は Iceberg ではサポートされておらず、互換性のある型にマッピングする必要があります。
データの一部を挿入する
INSERT INTO SELECT を使用して、MergeTree テーブルのデータを Iceberg テーブルに書き込みます。この例では、ロンドンのトランザクションのみを書き込みます。
Icebergテーブルをクエリする
データは現在、オブジェクトストレージにIceberg形式で保存されており、ClickHouse や Iceberg を読み取れる他の任意のツールからクエリできます。
集計結果を書き込む
Iceberg テーブルは、生の行の保存に限られません。集計や変換の出力、つまり ClickHouse 内で実行される ETL プロセスの結果も保持できます。これは、事前計算したサマリーをレイクハウスに公開し、後続の処理で利用できるようにする場合に有用です。
集計結果用のIcebergテーブルを作成する
集計データの挿入
町ごとの平均不動産価格を計算し、その結果を直接 Iceberg に書き込みます:
集計済みテーブルをクエリする
これで、他のツールや別の ClickHouse インスタンスから、この事前計算済みのデータセットを読み取れるようになりました。