メインコンテンツまでスキップ
に最終更新

PostgreSQL CDC による自動テーブル作成同期

自動テーブル作成同期は、ネイティブの FROM POSTGRES (...) TO DATABASE (...) DDL によって実装されます。ターゲットは Doris のデータベースコンテナであり、Doris が下流テーブルを自動作成します。 include_tables を使用して、単一のテーブル、複数のテーブル、またはすべてのテーブルを同期するかどうかを制御できます。初回同期では、Doris が下流の主キーテーブルを自動的に作成し、その主キーを上流と一致させます。この方法は、データに対する SQL 処理が不要で、下流テーブルのスキーマを上流に自動的に追従させる必要があるミラーレプリケーションのシナリオに適しています。

Flink CDC の機能を統合することで、Doris は PostgreSQL から変更ログを読み取り、テーブル群の完全データ + 増分データを Stream Load 経由で Doris に継続的に書き込みます。同期中に列マッピング、フィルタリング、データ変換を実行する必要がある場合は、SQL マッピングを使用した PostgreSQL CDC を参照してください。

ユースケース​

  • PostgreSQL データベース全体または複数のテーブルを Doris にミラーレプリケーションする
  • 手動でテーブルを作成せず、下流テーブルのスキーマを上流と一致させる
  • 同期パイプラインで列の絞り込み、フィルタリング、変換が不要
  • 完全な初期化と増分変更の継続的なキャプチャの両方が必要

注記​

  1. 現在保証されるのは at-least-once セマンティクスのみです。
  2. 現在サポートされるのは主キーテーブルの同期のみです。
  3. Load 権限が必要です。下流テーブルが存在しない場合は、Create 権限も必要です。
  4. テーブルの自動作成中にターゲットテーブルが既に存在する場合はスキップされるため、ユーザーはシナリオごとにテーブルをカスタマイズできます。

クイックスタート​

以下の手順で PostgreSQL 自動テーブル作成同期ジョブを作成し、ステータスを確認します。

ステップ 1: ロードジョブを作成する​

CREATE STREAMING JOB を使用して、継続的なロードジョブを作成します。

CREATE JOB test_postgres_job
ON STREAMING
FROM POSTGRES (
"jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/postgres",
"driver_url" = "postgresql-42.5.1.jar",
"driver_class" = "org.postgresql.Driver",
"user" = "postgres",
"password" = "postgres",
"database" = "postgres",
"schema" = "public",
"include_tables" = "test_tbls",
"offset" = "latest"
)
TO DATABASE target_test_db (
"table.create.properties.replication_num" = "1" -- Set to 1 for single-BE deployments
)

ステップ 2: ロードステータスを確認する​

select * from jobs("type"="insert") where ExecuteType = "STREAMING";

一時停止、再開、削除、タスクの表示など、より一般的な操作については、継続ロードの概要 を参照してください。

パラメーターリファレンス​

ソースパラメーター(PostgreSQL 側)​

PostgreSQL ソースパラメーターでは、JDBC 接続、同期範囲、完全スナップショットの分割動作を設定します。

パラメーターデフォルト説明
jdbc_url-PostgreSQL JDBC 接続文字列
driver_url-JDBC ドライバー jar へのパス。ファイル名、ローカル絶対パス、HTTP URL をサポートします。詳細は JDBC Catalog の概要 を参照してください
driver_class-JDBC ドライバークラス名
user-データベースユーザー名
password-データベースパスワード
database-データベース名
schema-スキーマ名
include_tables-同期するテーブル。カンマ区切りで指定します。空の場合はデフォルトですべてのテーブルを同期します
offsetlatestlatest: 増分のみの同期、initial: 完全 + 増分同期
snapshot_split_size40960 (8096 before 4.1.4)分割のサイズ(行数)。完全同期中、テーブルは同期のために複数の分割に分割されます
snapshot_parallelism1完全同期フェーズでの並列度、つまり 1 つの Task でスケジュールされる分割の最大数

Doris ターゲットデータベースのパラメーター​

ターゲット側のパラメーターでは、自動作成されるテーブルのプロパティと Stream Load の書き込み戦略を制御します。

パラメーターデフォルト説明
table.create.properties.*-テーブル作成時にテーブルのプロパティ(replication_num など)を指定できます
load.strict_mode-厳密モードを有効にするかどうか。デフォルトでは無効です
load.max_filter_ratio-サンプリングウィンドウ内で許可される最大フィルター率。値は 0 以上 1 以下である必要があります。デフォルト値は 0 で、許容度がゼロであることを示します。サンプリングウィンドウは max_interval * 10 です。サンプリングウィンドウ内でエラー行数と総行数の比率が max_filter_ratio を超えると、定期ジョブが一時停止され、データ品質の問題を確認するために手動介入が必要になります。

リファレンス​

ロードコマンドの構文​

自動テーブル作成同期ジョブを作成する構文は次のとおりです。

CREATE JOB <job_name>
[job_properties]
ON STREAMING
[ COMMENT <comment> ]
FROM POSTGRES (
[source_properties]
)
TO DATABASE <target_db> (
[target_properties]
)

各モジュールについて以下で説明します。

モジュール説明
job_nameジョブ名
job_propertiesJob の一般的なロードパラメーターを指定するために使用
commentコメント情報で Job を説明するために使用
source_propertiesPostgreSQL ソース関連パラメーター
target_propertiesDoris ターゲットデータベース関連パラメーター

よくある質問​

Q1: 自動テーブル作成同期と SQL マッピング同期はどのように選択しますか?

  • ミラーレプリケーション、自動テーブル作成、列の絞り込みや変換が不要な場合は、自動テーブル作成同期を使用します。
  • 同期パイプラインで列マッピング、フィルタリング、データ変換が必要な場合は、SQL マッピングを使用した PostgreSQL CDC を使用します。

Q2: 非主キーテーブルはサポートされていますか?

現在サポートされるのは主キーテーブルの同期のみです。非主キーテーブルは現時点ではサポートされていません。

Q3: 単一 BE デプロイメントでテーブル作成に失敗した場合はどうすればよいですか?

デフォルトのレプリカ数と利用可能な BE 数の不一致を避けるため、"table.create.properties.replication_num" = "1" を TO DATABASE 句で明示的に設定する必要があります。

Q4: ターゲットテーブルが既に存在する場合、上書きされますか?

いいえ。テーブルの自動作成フェーズでは、既に存在するターゲットテーブルはスキップされます。必要に応じて、事前にテーブルスキーマをカスタマイズできます。

Q5: 増分データのみを同期して、完全同期フェーズをスキップするにはどうすればよいですか?

offset を latest に設定します。ジョブは最新の増分変更のみを消費し、完全な初期化は実行しなくなります。