DTS、DataWorks、Flink CDC、および Catalog を使用して、セルフマネージド PostgreSQL、ApsaraDB RDS for PostgreSQL、PolarDB for PostgreSQL などの PostgreSQL ソースからApsaraDB for SelectDB にデータを移行することができます。データ量とビジネスシナリオに基づいて、適切な移行方法を選択できます。
移行ソリューション
DTS、DataWorks、Flink CDC、カタログはいずれも、PostgreSQL から SelectDB にデータを移行するために使用できますが、各方法でサポートされるデータは異なります。ビジネスシナリオに基づいて、適切な移行方法を選択できます。
ソリューション | 履歴データ移行 | 増分データ同期 | スキーマ移行 | データベース移行 | 増分 DDL 同期 | データ検証 |
✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | |
✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | |
✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
前提条件
PostgreSQL インスタンスと SelectDB インスタンスの間のネットワーク接続性を確保してください。
PostgreSQL インスタンスと SelectDB インスタンスは、同じ VPC 内にある必要があります。同じ VPC 内にない場合は、まずネットワーク接続の問題を解決する必要があります。詳細については、「SelectDB インスタンスとデータソース間のネットワーク接続の問題を解決する方法」をご参照ください。
PostgreSQL インスタンスの IP アドレスは、SelectDB の IP アドレスホワイトリストに追加されています。詳細については、「IP アドレスホワイトリストを設定する」をご参照ください。
PostgreSQL インスタンスに IP アドレスホワイトリストがある場合、SelectDB インスタンスのネットワークセグメントの IP アドレス範囲が PostgreSQL インスタンスの IP アドレスホワイトリストに追加されています。
-
ご利用の SelectDB インスタンスが存在する VPC の IP 範囲を取得するには、「ApsaraDB for SelectDB インスタンスが配置されている VPC の IP CIDR ブロックを確認する方法」をご参照ください。
-
SelectDB インスタンスのパブリック IP アドレスを取得するには、そのパブリックエンドポイントSelectDB に対して
PINGコマンドを使用します。
-
操作手順
DTS を使用した移行
DTS は、PostgreSQL から SelectDB への履歴データ移行と増分データ同期をサポートするほか、スキーマ移行、DDL 同期、データ検証などの機能もサポートしています。
データを同期するには、次のトピックをご参照ください。
データを移行するには、次のトピックをご参照ください。
DataWorks を使用した移行
ステップ1:データソースの追加
データ同期タスクを開発する場合、DataWorks で PostgreSQL と SelectDB のデータソースを作成する必要があります。
PostgreSQL データソースを作成してください。
SelectDB データソースを作成します。詳細については、「データソース管理」をご参照ください。SelectDB データソースの一部の設定パラメーターは次のとおりです:
パラメーター
説明
[データソース名]
データソースの名前。
[JDBC URL]
JDBC 接続文字列
jdbc:mysql://。: / SelectDB コンソールのインスタンスの詳細 > ネットワーク情報 ページで、VPC アドレス (または インターネットアドレス) と MySQL プロトコルポート を見つけます。
例:
jdbc:mysql://selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:9030/test_db[FE HTTP エンドポイント]
HTTP アクセス URL は
<ip>:<port>です。SelectDB コンソールの インスタンスの詳細 > ネットワーク情報 ページで、VPC アドレス (または インターネットアドレス) と HTTP プロトコルポート を確認します。
例:
selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:8080[ユーザー名]
SelectDB インスタンスのユーザー名。
[パスワード]
SelectDB インスタンスのユーザーのパスワード
ステップ2:データ同期の設定
次のいずれかの方法でデータ同期タスクを設定してください。
Flink CDC を使用した移行
Flink は Flink CDC を使用して、PostgreSQL から SelectDB にデータを移行します。Flink CDC は、履歴データの移行と増分データの同期の両方をサポートし、スキーマとテーブルの移行や DDL 同期などの包括的な機能を提供します。
環境の準備
Flink 環境をセットアップしてください。 この例では、Flink 1.16 スタンドアロン環境を使用します。
flink-1.16.3-bin-scala_2.12.tgz パッケージをダウンロードして展開してください。 利用可能な他のバージョンについては、「Apache 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.tgzFLINK_HOME/lib ディレクトリに移動し、flink-sql-connector-postgres-cdc-2.4.2 と flink-doris-connector-1.16-1.5.2 をダウンロードしてください。 次のサンプルコードは参考用です。
説明データベース移行は Flink 1.15 以降でサポートされています。 Flink のバージョンごとに Flink Doris Connector をダウンロードする方法については、「Flink Doris Connector」をご参照ください。
cd flink-1.16.3 cd lib/ wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-postgres-cdc/2.4.2/flink-sql-connector-postgres-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 インスタンスに接続します。詳細については、「インスタンスに接続する」をご参照ください。
テストデータベースとテストテーブルを作成してください。
テストデータベースを作成してください。
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 ジョブの送信
次の構文を使用して 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 | はい | Flink のチェックポイント間隔。 データ同期の頻度に影響します。 10s を推奨します。 |
parallelism.default | いいえ | Flink ジョブの並列度。 並列度を上げることで、データ同期の速度を向上させることができます。 |
database | はい | SelectDB に同期するデータベース名。 |
including-tables | いいえ | 同期する PostgreSQL テーブル。 パイプ (|) を使用して複数のテーブル名を区切ることができます。 正規表現がサポートされています。 例えば、 |
excluding-tables | いいえ | 除外するテーブル。 このパラメーターは including-tables と同じ方法で設定されます。 |
postgres-conf | はい | Postgres CDC ソースの設定。設定の詳細については、「Postgres CDC コネクタ」をご参照ください。この設定では |
sink-conf | はい | Doris Sink の設定。 詳細については、「Flink を使用したデータのインポート」をご参照ください。 |
table-conf | いいえ | ApsaraDB for SelectDB テーブルの設定。 これらは、ApsaraDB for SelectDB テーブルを作成する際に指定されるプロパティです。 |
カタログを使用した移行
SelectDB のカタログ機能を使用すると、フェデレーテッドクエリで PostgreSQL にアクセスし、PostgreSQL から SelectDB に履歴データを簡単かつ迅速に移行できます。
SelectDB インスタンスに接続します。 詳細については、「インスタンスに接続する」をご参照ください。
説明DMS を使用してログインすると、
SWITCHコマンドは失敗します。MySQL クライアントを使用して接続することをお勧めします。PostgreSQL JDBC カタログを作成してください。
CREATE 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" );パラメーター
パラメーター
必須
説明
user
はい
データベースアカウントのユーザー名。
password
はい
データベースアカウントのパスワード。
jdbc_url
はい
JDBC 接続文字列。
driver_url
はい
JDBC ドライバーの JAR ファイル名。
driver_class
はい
JDBC ドライバーのクラス名。
lower_case_table_names
いいえ
外部 JDBC データソースからデータベース名とテーブル名を小文字で同期するかどうかを指定します。
デフォルト値:
"false"only_specified_database
いいえ
指定されたデータベースのみを同期するかどうかを指定します。
デフォルト値:
"false"include_database_list
いいえ
only_specified_database=trueの場合、同期する複数のデータベースをカンマ (,) で区切って指定します。データベース名では大文字と小文字が区別されます。デフォルト値:
""exclude_database_list
いいえ
only_specified_database=trueの場合、同期するデータベースを指定します。複数のデータベース名はコンマ (,) で区切ります。データベース名では大文字と小文字が区別されます。デフォルト値:
""詳細については、「JDBC データソース」をご参照ください。
SelectDB でテーブルを作成した後、インデータベース ETL 構文
insert into selectを使用してデータを同期できます。insert intoの詳細については、「INSERT INTO」をご参照ください。# テーブルを作成します。 CREATE TABLE selectdb_table ... # データを移行します。 INSERT INTO selectdb_table SELECT * FROM jdbc_postgresql.pg_database.pg_table;