DataWorks では、コードレス UI またはコードエディタでバッチ同期タスクを設定し、シャーディングデータベースとテーブルから単一の宛先テーブルへデータを同期できます。本トピックでは、シャーディングされた MySQL データベースからデータを同期する例を示します。
前提条件
同期用のデータソースを準備します。詳細については、「サポートされるデータソースと読み取り/書き込みプラグイン」をご参照ください。
概要
シャーディング用のバッチ同期タスクを作成するには、次の方法を使用できます。以下の表で、これらの方法を比較します。
|
項目 |
|||
|
コードレス UI のサポート |
あり |
あり |
なし |
|
ルールベースのテーブル名設定 |
正規表現によるソーステーブル名の設定をサポートします。実行時に、タスクは一致するテーブルを検索して同期します。 |
サポートされていません。 |
数値範囲を使用してテーブル名を設定できます。たとえば、 |
|
同一テーブルスキーマの要件 |
欠落フィールドポリシーを設定することで、一部のテーブルでフィールドの欠落を許容できます。これらのフィールドは NULL 値として出力されます。 |
すべてのテーブルが同一のスキーマを持つ必要があります。 |
|
|
列マッピングの参照元 |
シャーディングデータソースのメタデータソース内で最初に一致したテーブル。 |
最初のデータソースの最初のテーブル。 |
コードエディタで手動で指定。 |
|
サポートされるデータソース数 |
シャーディングデータソースは最大 5,000 個のデータソースを参照できます。 |
単一ノードに対して 50 個以下のデータソースを設定することを推奨します。 |
|
|
データソース追加時のノード変更と公開の要否 |
ノードの変更は不要です。データソースを変更すると、新しいインスタンスに対して変更が有効になります。 |
新しいデータソースを追加してそのテーブル名を設定するには、タスクを変更する必要があります。 |
|
|
サポートされるデータソースタイプ |
MySQL、PolarDB、PolarDB-O、OceanBase |
MySQL、PolarDB、AnalyticDB、OceanBase |
MySQL、PolarDB、AnalyticDB、SQL Server、Oracle、PostgreSQL、DM、DB2、OceanBase |
シャーディングデータソースとコードレス UI
[Data Integration] ページに移動します。
DataWorks コンソールにログインします。 左側のナビゲーションウィンドウで、[Data Integration] をクリックします。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[Data Integrationに移動] をクリックします。
-
左側のナビゲーションペインで、Data Source をクリックし、次に Add Data Source をクリックしてデータソースタイプを選択します。この方法では現在、MySQL、PolarDB、および PolarDB-O をサポートしています。
-
シャーディングデータベースごとに標準データソースを作成します。本トピックでは MySQL を例として使用します。詳細な手順については、「データソースの設定」をご参照ください。
データソースの作成後、[データソースリスト] ページで各シャーディングデータベースの MySQL データソースを確認できます。例えば、
MySQL_20241114という名前のデータソースは、データベースuser_info_20241114に対応します。 -
[シャードデータベースとテーブル] データソースを作成すると、複数の標準データソースを単一のデータソースに結合して、同期元として使用できます。
-
Add Data Source をクリックし、[シャードデータベースとテーブル] を選択します。[データソースの追加] ダイアログボックスで、[シャードデータベースとテーブル] タブをクリックします。利用可能なデータソースタイプには、[MySQL (シャードデータベースとテーブル)]、[PolarDB-O (シャードデータベースとテーブル)]、および [PolarDB (シャードデータベースとテーブル)] があります。
-
シャーディングデータソースタイプを選択し、パラメーターを設定します。本トピックでは MySQL (シャーディングデータベースとテーブル) を例として使用します。
[データソース名] に
Database_and_Table_Sharding_of_MySQLなどの名前を入力します。パラメーターの設定後、[完了] をクリックしてシャーディングデータソースを作成します。主なパラメーター:
-
[Data Source Name]:データソースにカスタム名を指定します。
-
[データソースの選択]: シャードデータベース用に作成した標準データソースを選択します。
-
[メタデータソース]:シャーディング同期では、すべてのデータソース内のテーブルのスキーマが同一である必要があります。デフォルトのメタデータのテンプレートとして、1 つのデータソースを選択します。このテンプレートは、同期タスクの設定時にデフォルトのスキーマを取得するために使用されます。
重要データソース間でテーブルスキーマが一致していない場合、同期タスクは失敗します。
-
-
-
バッチ同期ノードを作成します。
-
シャーディング同期タスクを設定します。
コードレス UI でシャーディングを設定するには、Data Source で [MySQL (シャーディングされたデータベースとテーブル)] を選択し、次に作成したシャーディングされたデータソースを選択します。 詳細については、「コードレス UI を使用してバッチ同期タスクを設定する」をご参照ください。
説明本トピックでは MySQL (シャーディングデータベースとテーブル) を例として使用しています。業務要件に基づいてタイプを選択してください。
ネットワーク接続テストページには、ソースデータソース名が [Database_and_Table_Sharding_of_MySQL]、リソースグループが [Serverless_Resource] (中国 (上海) 、従量課金、0.5 CU 消費) 、宛先が [MaxCompute (ODPS)] タイプのデータソース [doc_test_project] と表示されます。3 つすべての接続テストに成功しました。
-
Next をクリックします。
-
同期するテーブルを選択し、Save と Publish をクリックし、残りの手順を完了します。
[ソースと宛先の設定] ページの [タスクの設定] ステップで、左側の [ソース] セクションで、データソースとして [MySQL (シャーディングデータベースとテーブル)] を選択します。[テーブル選択方法] を [固定テーブル] に設定し、[user_info] テーブルを選択し、[分割キー] に [id] を入力します。(シャーディングでは、すべてのテーブルが同一のスキーマを持つ必要があります。そうでない場合、タスクは失敗します。) 右側の [宛先] セクションで、データソースとして [MaxCompute(ODPS)] を選択し、テーブル名を [user_info] に設定します。[パーティション情報] を
pt=${bizdate}に設定します。[書き込みモード] を [Insert Overwrite] に設定し、[空の文字列をnullに変換] を [いいえ] に設定します。
標準データソースとコードレス UI
-
シャーディングデータベースごとに標準データソースを作成します。本トピックでは MySQL を例として使用します。詳細な手順については、「データソースの設定」をご参照ください。
-
バッチ同期ノードを作成します。
-
シャーディング同期タスクを設定します。
コードフリー UI でシャーディングを設定するには、Data Source セクションで [+ データソースの編集] をクリックします。 表示されるデータソース選択パネルで、シャーディングされたデータベースのデータソースを選択して追加します。 詳細については、「コードフリー UI を使用してバッチ同期タスクを設定する」をご参照ください。
-
標準データソースをSelected Data Sourcesリストに追加し、Confirmをクリックします。
-
Next をクリックします。
-
データソースごとに同期するテーブルを選択し、次にSaveとPublishをクリックして、残りの手順を完了します。
重要この設定では、Data Sources for Sharded Databases Use Same Account and Password オプションがデフォルトで選択されています。これは、すべてのシャードデータソースが最初のデータソースのアカウントとパスワードを使用して、それぞれのデータベースにアクセスすることを意味します。シャードデータベースで異なるアカウントとパスワードを使用する場合は、このオプションの選択を解除します。これにより、各データソースは独自に設定された認証情報を使用できるようになります。
[ソースと宛先の設定] ページの左側の [ソース] セクションには、
MySQL_20241112、MySQL_20241114、MySQL_20241113などの 3 つの MySQL シャーディングデータソースが設定されています。各データソースに対して、[user_info] テーブルが選択されています。ページには「シャーディングでは、すべてのテーブルが同一のスキーマを持つ必要があります。そうでない場合、タスクは失敗します。」という警告が表示されます。右側の [宛先] セクションでは、データソースが [MaxCompute (ODPS)]、テーブルが [user_info] です。[パーティション情報] はpt=${bizdate}に設定され、[書き込みモード] は [Insert Overwrite] です。
コードエディタ
-
バッチ同期ノードを作成します。
-
シャーディング同期タスクを設定します。
コードエディタでシャーディングを設定するには、次の例のようなスクリプトを使用します。タスクの設定方法の詳細については、「コードエディタを使用したバッチ同期タスクの設定」をご参照ください。
重要実行する前に、次のコードからコメントを削除してください。
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"mysql", "parameter":{ "envType":0, "column":[ "id", "name" ], "socketTimeout":3600000, "tableComment":"", "connection":[ // シャーディングデータベースの数に基づいて接続を設定します。 { "datasource":"datasourceName1", // シャーディングデータソース1。 "table":[ // データソース1のテーブル。 "tb1" ] }, { "datasource":"datasourceName2", // シャーディングデータソース2。 "table":[ // データソース2のテーブル。 "tb2", "tb3" ] } ], "useSpecialSecret":true, // 各データソースは独自のパスワードを使用します。 "where":"", "splitPk":"id", "encoding":"UTF-8" }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"pt=${bizdate}", "truncate":true, "datasource":"odpsname", "envType":0, "isSupportThreeModel":false, "column":[ "id", "name" ], "emptyAsNull":false, "tableComment":"", "table":"t1", "consistencyCommit":false }, "name":"Writer", "category":"writer" } ], "setting":{ "executeMode":null, "errorLimit":{ "record":"" }, "speed":{ "concurrent":2, "throttle":false } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
よくある質問
同期ノードでシャーディングデータソースが表示されない (API エラー 610002)
現象: シャーディングデータソースを作成した後、同期ノードの [データソース] ドロップダウンリストに表示されません。/di/getDataSourceList API コールは code:610002 を返します。
原因: これはシステム内のダーティデータが原因の既知の問題です。シャーディングデータソースのみに影響します。MySQL や PolarDB などの標準データソースは影響を受けません。
解決策: チケットを送信し、ワークスペース ID とデータソース名を提供してください。DataWorks バックエンドチームが調査し、ダーティデータをクリーンアップします。
作成者の退職後にシャーディングタスクが失敗し、データソースが見つからない
現象: シャーディング同期タスクを作成した従業員が退職した後、以前は正常に実行されていたタスクが失敗し始めます。以前に設定されていたシャーディングデータソースが同期ノードで見つからなくなりますが、データソースセンターには表示され、接続テストは成功します。タスク所有者を変更しても問題は解決しません。
原因: この問題は、従業員の退職など、作成者のアカウントステータスの変更によって発生したダーティデータが原因です。ダーティデータが原因で、同期ノードのデータソースリストを取得する API がシャーディングデータソースを正しく返せなくなります。
解決策: チケットを送信し、ワークスペース ID とデータソース名を提供してください。DataWorks バックエンドチームが調査し、ダーティデータをクリーンアップします。クリーンアップ後、シャーディングデータソースが再び表示され、同期タスクが期待どおりに実行できるようになります。