ClickHouseとPostgreSQLの接続
このページでは、PostgreSQLをClickHouseと統合するための以下のオプションを説明します。
- ClickPipesを使用する。PeerDBによって提供されるClickHouse Cloud用のマネージド統合サービスで、現在はパブリックベータ版です。
- PeerDBを使用する。PostgreSQLデータベースのレプリケーションに特化したオープンソースのCDCツールで、セルフホストされるClickHouseおよびClickHouse Cloudの両方に対応しています。
PostgreSQL
テーブルエンジンを使用し、PostgreSQLテーブルからの読み込みを行う。- 実験的な
MaterializedPostgreSQL
データベースエンジンを使用し、PostgreSQLのデータベースとClickHouseのデータベースを同期する。
PostgreSQLテーブルエンジンの使用
PostgreSQL
テーブルエンジンは、ClickHouseからリモートのPostgreSQLサーバー上に保存されたデータに対してSELECTおよびINSERT操作を許可します。このドキュメントでは、1つのテーブルを使用した基本的な統合方法を説明します。
1. PostgreSQLの設定
postgresql.conf
に、PostgreSQLがネットワークインターフェースでリスンするように以下のエントリを追加します。
- ClickHouseから接続するためのユーザーを作成します。デモンストレーションの目的で、この例では完全なスーパーユーザー権限を付与します。
- PostgreSQLに新しいデータベースを作成します。
- 新しいテーブルを作成します。
- テスト用にいくつかの行を追加します。
- 新しいユーザーで新しいデータベースへの接続を許可するようにPostgreSQLを構成するには、
pg_hba.conf
ファイルに以下のエントリを追加します。アドレス行は、PostgreSQLサーバーのサブネットまたはIPアドレスで更新してください。
pg_hba.conf
設定をリロードします(このコマンドはバージョンによって調整してください)。
- 新しい
clickhouse_user
がログインできるか確認します。
ClickHouse Cloudでこの機能を使用している場合は、ClickHouse CloudのIPアドレスがPostgreSQLインスタンスにアクセスできるようにする必要があるかもしれません。 ClickHouseのCloud Endpoints APIで、送信トラフィックの詳細を確認してください。
2. ClickHouseでテーブルを定義
clickhouse-client
にログインします。
- 新しいデータベースを作成します。
PostgreSQL
を使用するテーブルを作成します。
必要な最小パラメーターは以下の通りです:
parameter | Description | example |
---|---|---|
host:port | ホスト名またはIPとポート | postgres-host.domain.com:5432 |
database | PostgreSQLデータベース名 | db_in_psg |
user | PostgreSQLへの接続ユーザー名 | clickhouse_user |
password | PostgreSQLへの接続パスワード | ClickHouse_123 |
完全なパラメーターリストについては、PostgreSQLテーブルエンジンのドキュメントページをご覧ください。
3 統合のテスト
- ClickHouseで初期行を表示します:
ClickHouseのテーブルには、PostgreSQLのテーブルに既に存在している2行が自動的に反映されているはずです:
- PostgreSQLに戻り、テーブルに行をいくつか追加します:
- 新しく追加された2行がClickHouseテーブルに表示されるはずです:
応答は次のようになります:
- ClickHouseテーブルに行を追加すると何が起こるか見てみましょう:
- ClickHouseで追加された行はPostgreSQLのテーブルに表示されるはずです:
この例では、PostgreSQL
テーブルエンジンを使用してPostgreSQLとClickHouseの基本的な統合を示しました。
他の機能としてスキーマの指定、カラムのサブセットのみを返すこと、複数のレプリカへの接続については、PostgreSQLテーブルエンジンのドキュメントページをチェックしてください。また、ClickHouseとPostgreSQL - データの天国における出会い - パート1ブログもチェックしてください。
MaterializedPostgreSQLデータベースエンジンの使用
PostgreSQLデータベースエンジンは、PostgreSQLのレプリケーション機能を利用して、すべてのスキーマとテーブルまたはそのサブセットのデータベースのレプリカを作成します。このドキュメントでは、1つのデータベース、1つのスキーマ、および1つのテーブルを使用した基本的な統合方法を示します。
以下の手順では、PostgreSQL CLI (psql) と ClickHouse CLI (clickhouse-client) を使用します。PostgreSQLサーバーはLinuxにインストールされています。PostgreSQLデータベースが新しいテストインストールの場合は、以下の最小設定が必要です
1. PostgreSQLでの設定
postgresql.conf
で、最小のリスニングレベル、レプリケーションWALレベル、レプリケーションスロットを設定します。
次のエントリを追加します:
*ClickHouseは最低logical
WALレベルおよび2つのレプリケーションスロットが必要です。
- 管理者アカウントを使用し、ClickHouseから接続するためのユーザーを作成します:
*デモ目的で、完全なスーパーユーザー権限が付与されました。
- 新しいデータベースを作成します:
psql
で新しいデータベースに接続します:
- 新しいテーブルを作成します:
- 初期行を追加します:
- PostgreSQLが新しいユーザーでレプリケーション用の新しいデータベースへの接続を許可するように構成します。以下は
pg_hba.conf
ファイルに追加する最小エントリです:
*デモ目的で、クリアテキストパスワード認証メソッドを使用しています。アドレス行はPostgreSQLドキュメントに従って、サーバーのサブネットまたはアドレスで更新してください。
- 次のようにして
pg_hba.conf
設定をリロードします(バージョンに応じて調整してください):
- 新しい
clickhouse_user
でログインをテストします:
2. ClickHouseでの設定
- ClickHouse CLIにログインします:
- データベースエンジンのPostgreSQL実験的機能を有効にします:
- レプリケーションされる新しいデータベースと初期テーブルを定義します:
最小オプションは以下の通りです:
parameter | Description | example |
---|---|---|
host:port | ホスト名またはIPとポート | postgres-host.domain.com:5432 |
database | PostgreSQLデータベース名 | db1 |
user | PostgreSQLへの接続ユーザー名 | clickhouse_user |
password | PostgreSQLへの接続パスワード | ClickHouse_123 |
settings | エンジンに関する追加設定 | materialized_postgresql_tables_list = 'table1' |
PostgreSQLデータベースエンジンの完全なガイドについては、https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settingsを参照してください
- 初期テーブルにデータがあるか確認します:
3. 基本的なレプリケーションのテスト
- PostgreSQLで新しい行を追加します:
- ClickHouseで新しい行が見えることを確認します:
4. まとめ
この統合ガイドでは、テーブルを持つデータベースのレプリケーション方法に関する単純な例に焦点を当てましたが、データベース全体をレプリケートするか、新しいテーブルやスキーマを既存のレプリケーションに追加するなど、より高度なオプションも存在します。DDLコマンドはこのレプリケーションにはサポートされていませんが、エンジンは変更を検出し、構造変更が行われるとテーブルをリロードするように設定できます。
高度なオプションに使用可能な機能については、リファレンスドキュメントを参照してください。