ClickHouseとPostgreSQLの接続
このページでは、PostgreSQLとClickHouseを統合するための以下のオプションについて説明します。
- ClickPipesを使用する、ClickHouse Cloudのための管理された統合サービス - 現在プライベートプレビュー中です。こちらからサインアップしてください。
PeerDB by ClickHouse
を使用する、セルフホストのClickHouseおよびClickHouse CloudへのPostgreSQLデータベースレプリケーションのために特別に設計されたCDCツール- PeerDBは現在ClickHouse Cloudにネイティブに利用可能です - 私たちの新しいClickPipeコネクタを使用した、Blazing-fast PostgresからClickHouseへのCDC - 現在プライベートプレビュー中です。こちらからサインアップしてください。
PostgreSQL
テーブルエンジンを使用して、PostgreSQLテーブルから読み取る- 実験的な
MaterializedPostgreSQL
データベースエンジンを使用して、PostgreSQLのデータベースとClickHouseのデータベースを同期する
ClickPipesの使用(PeerDBによって提供)
PeerDBは現在ClickHouse Cloudにネイティブに利用可能です - 私たちの新しいClickPipeコネクタを使用した、Blazing-fast PostgresからClickHouseへのCDC - 現在プライベートプレビュー中です。こちらからサインアップしてください。
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とClickHouseの間の基本的な統合を示すもので、PostgreSQL
テーブルエンジンを使用しています。
スキーマの指定、カラムのサブセットを返す、複数のレプリカへの接続などの機能については、PostgreSQLテーブルエンジンのドキュメントページをご覧ください。また、ClickHouseとPostgreSQL - データの天国での出会い - パート1ブログもチェックしてください。
MaterializedPostgreSQLデータベースエンジンの使用
PostgreSQLデータベースエンジンは、PostgreSQLのレプリケーション機能を使用して、データベースのレプリカを作成します。すべてまたは一部のスキーマとテーブルを伴います。 この記事は、データベース、スキーマ、テーブルを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コマンドはこのレプリケーションではサポートされていませんが、エンジンは変更を検出し、構造が変更されたときにテーブルを再読み込みするように設定できます。
高度なオプションで利用できるさらに多くの機能については、リファレンスドキュメントをご覧ください。