ApsaraDB for SelectDB では、PostgreSQL ソースからデータをロードするための以下の 4 つの方法がサポートされています:Data Transmission Service (DTS)、DataWorks、Flink 変更データキャプチャ (CDC)、およびカタログ。PostgreSQL ソースは、自主管理 PostgreSQL データベース、ApsaraDB RDS for PostgreSQL インスタンス、または PolarDB for PostgreSQL クラスターのいずれかになります。
移行ソリューションの比較
| ソリューション | 既存データの移行 | 増分同期 | スキーマ移行 | データベース移行 | DDL 操作の増分同期 | データ検証 |
|---|---|---|---|---|---|---|
| DTS | はい | はい | はい | はい | はい | はい |
| DataWorks | はい | はい | はい | はい | はい | いいえ |
| Flink CDC | はい | はい | はい | はい | はい | いいえ |
| カタログ | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
移行ソリューションの選択
DTS:リアルタイム同期、DDL の伝搬、エンドツーエンドのデータ検証を必要とする本番ワークロードに最適です。DTS では、最小限の手動設定で完全な移行ライフサイクルを処理できます。
DataWorks:チームがすでに DataWorks をデータ統合ワークフローに使用しており、スケジューリング対応のバッチ同期が必要な場合に適しています。
Flink CDC:既存の Flink インフラストラクチャを有し、並列度のカスタマイズやテーブルフィルターなど、同期パイプラインに対して詳細な制御を必要とするチームに適しています。
カタログ:一度限りの既存データロード向けの軽量ソリューションです。JDBC カタログを使用してフェデレーテッドクエリ経由で PostgreSQL データをクエリし、
INSERT INTO SELECTを用いて SelectDB へコピーします。
前提条件
開始前に、以下の点を確認してください。
PostgreSQL ソースと SelectDB インスタンスがネットワーク上で通信可能である。
両者が同一の仮想プライベートクラウド (VPC) 内にある場合、追加のネットワーク構成は不要です。
両者が異なる VPC 内にある場合、クロス VPC 接続を構成してください。詳細については、「SelectDB インスタンスとデータソース間の接続確立に失敗した場合の対処方法」をご参照ください。
PostgreSQL ソースの IP アドレスが、SelectDB インスタンスの IP アドレスホワイトリストに登録されている。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。
PostgreSQL ソースが IP アドレスホワイトリストをサポートしている場合、SelectDB インスタンスの CIDR ブロックをそのホワイトリストに登録してください。
SelectDB インスタンスの VPC IP アドレスを確認するには、SelectDB コンソールに移動し、[インスタンスの詳細] ページを開き、[ネットワーク情報] セクションを確認します。詳細については、「ApsaraDB SelectDB インスタンスが属する VPC 内の IP アドレスを確認する方法は?」をご参照ください。
SelectDB インスタンスのパブリック IP アドレスを確認するには:パブリックエンドポイントに対して
pingコマンドを実行します。
DTS を使用したデータ移行
DTS では、既存データの移行、増分同期、スキーマ移行、DDL 操作の同期、およびデータ検証がサポートされています。
PostgreSQL ソースの種類に応じて、以下の DTS ガイドを参照してください。
データ同期:
PolarDB for PostgreSQL クラスターから ApsaraDB for SelectDB インスタンスへのデータ同期
ApsaraDB RDS for PostgreSQL インスタンスから ApsaraDB for SelectDB インスタンスへのデータ同期
データ移行:
DataWorks を使用したデータ移行
ステップ 1:データソースの追加
DataWorks に PostgreSQL データソースおよび SelectDB データソースを追加します。
PostgreSQL データソースを追加します。詳細については、「PostgreSQL データソース」をご参照ください。
SelectDB データソースを追加します。詳細については、「データソースの追加と管理」をご参照ください。SelectDB データソースを追加する際には、以下のパラメーターを使用します。
パラメーター 説明 例 データソース名 このデータソース接続の名前。 selectdb_prodホストアドレス/IP アドレス jdbc:mysql://<ip>:<port>/<dbname>形式の JDBC URL。SelectDB コンソールの「ネットワーク情報」セクション(「インスタンスの詳細」ページ内)から、VPC エンドポイントまたはパブリックエンドポイントと MySQL ポートを取得します。jdbc:mysql://selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:9030/test_dbHTTP 接続アドレス <ip>:<port>形式の HTTP エンドポイント。SelectDB コンソールの「ネットワーク情報」セクション(「インスタンスの詳細」ページ内)から、VPC エンドポイントまたはパブリックエンドポイントと HTTP ポートを取得します。selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:8080ユーザー名 SelectDB インスタンスの所有者アカウントのユーザー名。 adminパスワード SelectDB インスタンスの所有者アカウントのパスワード。 —
ステップ 2:データ同期タスクの構成
ビジュアルエディタまたはコードエディタのいずれかを使用して、バッチ同期タスクを作成します。
Flink CDC を使用したデータ移行
Flink CDC では、既存データの移行、増分同期、スキーマ移行、および DDL 操作の同期がサポートされています。
環境のセットアップ
以下の手順では、Flink バージョン 1.16 のスタンドアロンクラスターをデプロイします。
Flink パッケージをダウンロードして展開します。
wget https://archive.apache.org/dist/flink/flink-1.16.3/flink-1.16.3-bin-scala_2.12.tgz tar -zxvf flink-1.16.3-bin-scala_2.12.tgzバージョン 1.16.3 が利用不可の場合、Apache Flink のダウンロードページから後続のバージョンをダウンロードしてください。
CDC コネクタおよび SelectDB コネクタを
lib/ディレクトリにダウンロードします。完全データ同期には Flink 1.15 以降が必要です。その他のコネクタバージョンについては、「Maven 上の org/apache/doris」をご参照ください。
cd flink-1.16.3/lib/ wget https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.4.2/flink-sql-connector-mysql-cdc-2.4.2.jar wget https://repo.maven.apache.org/maven2/org/apache/doris/flink-doris-connector-1.16/1.5.2/flink-doris-connector-1.16-1.5.2.jarFlink スタンドアロンクラスターを起動します。
bin/start-cluster.shSelectDB インスタンスを作成します。詳細については、「インスタンスの作成」をご参照ください。
MySQL プロトコル経由で SelectDB インスタンスに接続します。詳細については、「インスタンスへの接続」をご参照ください。
SelectDB にテスト用データベースおよびテーブルを作成します。
CREATE DATABASE test_db; USE test_db; CREATE TABLE employees ( emp_no int NOT NULL, birth_date date, first_name varchar(20), last_name varchar(20), gender char(2), hire_date date ) UNIQUE KEY(`emp_no`) DISTRIBUTED BY HASH(`emp_no`) BUCKETS 1;
Flink CDC ジョブの送信
以下のコマンドは、PostgreSQL ソースから指定されたフィルターに一致するすべてのテーブルを同期し、SelectDB データベース db1 に書き込む Flink CDC ジョブを送信します。
<FLINK_HOME>/bin/flink run \
-Dexecution.checkpointing.interval=10s \
-Dparallelism.default=1 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
lib/flink-doris-connector-1.16-1.5.2.jar \
postgres-sync-database \
--database db1 \
--postgres-conf hostname=127.0.0.1 \
--postgres-conf port=5432 \
--postgres-conf username=postgres \
--postgres-conf password="123456" \
--postgres-conf database-name=postgres \
--postgres-conf schema-name=public \
--postgres-conf slot.name=test \
--postgres-conf decoding.plugin.name=pgoutput \
--including-tables "tbl1|test.*" \
--sink-conf fenodes=selectdb-cn-****.selectdbfe.rds.aliyuncs.com:8080 \
--sink-conf username=admin \
--sink-conf password=****パラメーターのリファレンス:
| パラメーター | 必須 | 説明 | 例 |
|---|---|---|---|
execution.checkpointing.interval | はい | チェックポイント間隔。同期頻度を制御します。 | 10s |
parallelism.default | いいえ | Flink ジョブの並列度。この値を増やすことで同期を高速化できます。 | 1 |
database | はい | SelectDB インスタンス内のターゲットデータベース名。 | db1 |
including-tables | いいえ | 同期対象の PostgreSQL テーブル。複数のテーブル名は | で区切ります。正規表現が使用可能です。 | table1|tbl.* |
excluding-tables | いいえ | 除外対象のテーブル。構文は including-tables と同一です。 | tmp.* |
postgres-conf | はい | Postgres CDC ソースの構成。必須パラメーターは hostname、username、password、table-name、schema-name、database-name です。全パラメーター一覧については、「Postgres CDC コネクタ」をご参照ください。 | — |
sink-conf | はい | Doris sink の構成。詳細については、「Flink を使用したデータのインポート」をご参照ください。 | — |
table-conf | いいえ | ターゲットテーブル作成時に適用される SelectDB テーブルのプロパティ。 | — |
カタログを使用したデータ移行
カタログ方式では、JDBC カタログを用いてフェデレーテッドクエリ経由で PostgreSQL データをクエリし、INSERT INTO SELECT を使用して SelectDB へコピーします。この方式は、一度限りの既存データロードに適しています。
この手順では、Data Management (DMS) を使用して SelectDB インスタンスに接続しないでください。SWITCH 文は DMS セッション内で無効になります。代わりに MySQL クライアントをご使用ください。SelectDB インスタンスに接続します。詳細については、「インスタンスへの接続」をご参照ください。
PostgreSQL ソース用の JDBC カタログを作成します。
パラメーター:
パラメーター 必須 説明 例 userはい PostgreSQL ソースへの接続に使用するアカウント。 rootpasswordはい アカウントのパスワード。 123456jdbc_urlはい PostgreSQL ソースの JDBC URL。 jdbc:postgresql://127.0.0.1:5432/demodriver_urlはい JDBC ドライバー JAR のファイル名。 postgresql-42.5.1.jardriver_classはい JDBC ドライバーのクラス名。 org.postgresql.Driverlower_case_table_namesいいえ データベースおよびテーブル名を小文字で同期するかどうか。デフォルト値: false。falseonly_specified_databaseいいえ 特定のデータベースのみを移行するかどうか。デフォルト値: false。falseinclude_database_listいいえ 移行対象のデータベースをカンマ区切りで指定します。 only_specified_database=trueの場合にのみ有効です。データベース名は大文字小文字を区別します。デフォルト値:""。db1,db2exclude_database_listいいえ 除外対象のデータベースをカンマ区切りで指定します。 only_specified_database=trueの場合にのみ有効です。データベース名は大文字小文字を区別します。デフォルト値:""。tmp_dbCREATE CATALOG jdbc_postgresql PROPERTIES ( "type"="jdbc", "user"="root", "password"="123456", "jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/demo", "driver_url" = "postgresql-42.5.1.jar", "driver_class" = "org.postgresql.Driver", "checksum" = "20c8228267b6c9ce620fddb39467d3eb" );カタログ構成の完全なリファレンスについては、「JDBC データソース」をご参照ください。
SelectDB にテーブルを作成し、
INSERT INTO SELECTを使用して PostgreSQL ソースからデータをコピーします。-- ターゲットテーブルの作成 CREATE TABLE selectdb_table ... -- PostgreSQL ソースからのデータ移行 INSERT INTO selectdb_table SELECT * FROM jdbc_postgresql.pg_database.pg_table;INSERT INTO構文の詳細については、「INSERT INTO を使用したデータのインポート」をご参照ください。