SQL マッピングを使用した PostgreSQL CDC
SQL マッピング同期は、Job と CDC Stream TVF を使用して実現します。同期先は既存の Doris テーブルです(INSERT INTO tbl SELECT * FROM cdc_stream(...))。Doris SQL を使用すると、列マッピング、フィルタリング、データ変換を行いながら、exactly-once セマンティクスを保証できます。この方法は、書き込み前にデータを処理する必要があるリアルタイム同期に適しています。
Doris は Flink CDC の読み取り機能を統合し、PostgreSQL の変更ログ(WAL)を読み取って、同期元テーブルから同期先テーブルへの全量同期と増分同期を行います。Doris に同期先テーブルを自動作成させ、データベース単位で複数のテーブルを同期したい場合は、テーブル自動作成を伴う PostgreSQL CDC を参照してください。
ユースケース
- 単一のテーブルをリアルタイムでウェアハウスに取り込み、書き込み前に列の絞り込み、フィルタリング、または式による変換が必要な場合。
- Doris の同期先テーブルがすでに存在し、SQL でフィールドのマッピングを明示的に制御したい場合。
- exactly-once セマンティクスを必要とする、高い一貫性要件がある場合。
前提条件
ジョブを作成する前に、次の事項を確認してください。
- PostgreSQL 側で論理レプリケーションが有効になっていること。詳細は設定ガイドを参照してください。
- 現在のユーザーに
Load権限があること。 - 同期元テーブルが主キーテーブルであること(現在、同期できるのは主キーテーブルのみです)。
- 同期先テーブルが Doris に事前に作成されており、そのスキーマがマッピング SQL と互換性があること。
注意事項
- exactly-once セマンティクスをサポートします。
- 現在、同期できるのは主キーテーブルのみです。
Load権限が必要です。- PostgreSQL 側で論理レプリケーションを有効にする必要があります。設定ガイドを参照してください。
クイックスタート
全体の手順は、継続的なロードジョブを作成し、ジョブの状態を確認するという二つのステップです。
ステップ 1: ロードジョブを作成する
CREATE STREAMING JOB を使用して、PostgreSQL の public.source_table を Doris の db1.tbl1 に同期する継続的なロードジョブを作成します。
CREATE JOB pg_single_sync
ON STREAMING
DO
INSERT INTO db1.tbl1
SELECT * FROM cdc_stream(
"type" = "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",
"table" = "source_table",
"offset" = "initial"
)
ステップ 2: ロード状態を確認する
jobs テーブル関数を使用して、Streaming タイプのジョブの実行状態を確認します。
select * from jobs("type"="insert") where ExecuteType = "STREAMING";
一時停止、再開、削除、タスクの表示など、その他の一般的な操作については、継続的なロードの概要を参照してください。
パラメーターリファレンス
データソースのパラメーター
データソースのパラメーターは cdc_stream(...) TVF で設定します。同期対象の PostgreSQL テーブルと読み取り動作を指定します。
| パラメーター | デフォルト | 説明 |
|---|---|---|
| type | - | データソースの種類。postgres を指定します。 |
| jdbc_url | - | PostgreSQL の JDBC 接続文字列。 |
| driver_url | - | JDBC ドライバーの jar ファイルのパス。ファイル名、ローカルの絶対パス、または HTTP URL を指定できます。詳細は JDBC Catalog の概要を参照してください。 |
| driver_class | - | JDBC ドライバーのクラス名。 |
| user | - | データベースのユーザー名。 |
| password | - | データベースのパスワード。 |
| database | - | データベース名。 |
| schema | - | スキーマ名。 |
| table | - | 同期するテーブルの名前。 |
| offset | latest | latest: 増分同期のみ。initial: 全量同期と増分同期。 |
| snapshot_split_size | 40960(4.1.4 より前は 8096) | 分割サイズ(行数)。全量同期時には、テーブルを複数の分割単位に分けて同期します。 |
| snapshot_parallelism | 1 | 全量同期フェーズの並列度。Task ごとにスケジュールされる分割単位の最大数です。 |
ロード設定パラメーター
ロード設定パラメーターは、ジョブの job_properties で設定します。ロード動作とセッション変数を制御します。
| パラメーター | デフォルト | 説明 |
|---|---|---|
| session.* | なし | すべてのセッション変数を job_properties で設定できます。ロード関連の変数については、Insert Into Selectを参照してください。 |
その他の一般的なパラメーター(max_interval など)については、継続的なロードの概要の「共通パラメーター」を参照してください。