メインコンテンツへスキップ
これは、PostgreSQL から ClickHouse への移行ガイドのパート 2です。実践的な例を用いて、CDC (変更データキャプチャ) を利用したリアルタイムレプリケーション方式で、移行を効率的に進める方法を示します。ここで扱う概念の多くは、PostgreSQL から ClickHouse への手動による一括データ移行にも当てはまります。
PostgreSQL 環境で使用している SQL クエリの大半は、修正せずに ClickHouse でも実行でき、多くの場合はさらに高速に動作します。

CDC (変更データキャプチャ) を使用した重複排除

CDC (変更データキャプチャ) を用いたリアルタイムレプリケーションでは、更新や削除によって重複した行が発生する可能性がある点に注意してください。これに対処するには、ビューやリフレッシュ可能なマテリアライズドビューを用いた手法を利用できます。 CDC (変更データキャプチャ) を用いたリアルタイムレプリケーションで移行する際に、PostgreSQL から ClickHouse へのアプリケーション移行を最小限の手間で行う方法については、このガイドを参照してください。

ClickHouseでクエリを最適化する

最小限のクエリ書き換えで移行することも可能ですが、クエリを大幅に簡素化し、さらにクエリパフォーマンスを向上させるには、ClickHouseの機能を活用することをおすすめします。 ここでの例では、よくあるクエリパターンを取り上げ、ClickHouseでどのように最適化できるかを示します。いずれも、PostgreSQLとClickHouseで同等のリソース (8コア、32GiB RAM) を用い、完全な Stack Overflow dataset (2024年4月時点まで) を使用しています。
簡略化のため、以下のクエリではデータを重複排除する手法は省略しています。
ここでの件数はわずかに異なります。これは、Postgresのデータには外部キーの参照整合性を満たす行しか含まれていないためです。ClickHouseにはそのような制約がないため、たとえば匿名ユーザーを含む完全なデータセットが含まれます。
最も多くの閲覧数を獲得しているUsers (質問数が10件を超えるユーザー) :
viewsが最も多いタグ:
集約関数 可能であれば、ClickHouseの集約関数を活用してください。以下では、各年で最も多く閲覧された質問を求めるために、argMax関数を使用する例を示します。
これは、同等のPostgresクエリよりも大幅にシンプルで、しかも高速です:
条件式とArray 条件式関数と配列関数を使うと、クエリを大幅に簡潔化できます。次のクエリは、2022 年から 2023 年にかけて増加率が最も高いタグ (出現回数が 10000 回を超えるもの) を求めます。次の ClickHouse クエリが簡潔なのは、条件式、配列関数、そして HAVING 句と SELECT 句で別名を再利用できるためです。
パート3はこちら
最終更新日 2026年6月10日