PostgreSQLクエリの書き直し
これは パート2 であり、PostgreSQL から ClickHouse への移行に関するガイドの一部です。実用的な例を用いて、リアルタイムレプリケーション (CDC) アプローチを使用して効率的に移行を行う方法を示しています。ここで取り上げる多くの概念は、PostgreSQL から ClickHouse への手動バルクデータ転送にも適用可能です。
PostgreSQL セットアップからのほとんどの SQL クエリは、変更なしで ClickHouse で実行でき、実行速度もかなり速くなるでしょう。
CDC を使用したデデュープlication
リアルタイムレプリケーションを CDC を使用して行う場合、更新および削除により重複行が発生する可能性があることに注意してください。これを管理するために、Views および Refreshable Materialized Views に関する技術を使用することができます。
最小限の摩擦で PostgreSQL から ClickHouse へのアプリケーション移行を行う方法については、この ガイド を参照してください。
ClickHouse でのクエリ最適化
最小限のクエリ書き換えで移行することは可能ですが、ClickHouse の機能を活用してクエリを大幅にシンプルにし、クエリパフォーマンスをさらに向上させることをお勧めします。
ここでの例は一般的なクエリパターンをカバーし、それらを ClickHouse で最適化する方法を示しています。これらは、PostgreSQL および ClickHouse(8コア、32 GiB RAM)の同等リソースにおけるフル Stack Overflow データセット (2024年4月まで) を使用しています。
簡素化のため、以下のクエリではデータの重複を排除するテクニックの使用を省略しています。
ここでのカウントは、Postgres データが外部キーの参照整合性を満たす行のみを含むため、やや異なります。ClickHouse はそのような制約を課さないため、完全なデータセット(例:匿名ユーザーを含む)を持っています。
最も多くのビューを受け取るユーザー(質問数が10以上のユーザー):
最もビューを受け取る tags
は:
集約関数
可能な限り、ユーザーは ClickHouse の集約関数を利用すべきです。以下に、各年で最もビューされた質問を計算するために argMax 関数を使用する例を示します。
これは、同等の Postgres クエリよりも著しく簡単(および迅速)です:
条件と配列
条件付きおよび配列機能は、クエリを大幅にシンプルにします。以下のクエリは、2022年から2023年にかけて最も多くの出現回数を持つタグ(10000回以上)を計算します。以下の ClickHouse クエリは条件、配列関数、および HAVING および SELECT 句でのエイリアス再利用の能力のおかげで、簡潔です。