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
データ統合ページに移動します。
DataWorks コンソールにログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[データ統合へ] をクリックします。
左側のナビゲーションウィンドウで [データソース] をクリックし、次に [データソースの追加] をクリックします。データソースタイプを選択します。この方法は MySQL、PolarDB、および PolarDB-O をサポートしています。
各シャーディングデータベースを標準データソースとして作成します。このトピックでは MySQL を例として使用します。詳細については、「データソース構成」をご参照ください。

[シャード] データソースを作成します。標準データソースを統合し、データ同期用の単一ソースとします。
[データソースの追加] をクリックし、[シャード] を選択します。

シャーディングデータソースタイプを選択し、パラメーターを構成します。このトピックでは MySQL (シャーディング) を例として使用します。

主要なパラメーターの説明:
[データソース名] をカスタマイズします。
[データソースの選択]:各シャーディングデータベース用に作成した標準データソースを選択します。
[メタデータソース]:シャーディングされたデータベースとテーブルの同期では、すべてのデータソースにわたるすべてのデータベースとテーブルのスキーマが同一である必要があります。デフォルトのメタデータのテンプレートとして使用するデータソースを選択します。これにより、同期タスクは構成中にデフォルトのデータベースとテーブルのスキーマをプルできます。
重要データソース内のデータベースとテーブルのスキーマが同一でない場合、同期タスクは失敗します。
シャーディングされたデータベースとテーブルの同期タスクを構成します。
コードレス UI で、[データソース] パラメーターを [MySQL (シャーディング)] に設定し、既存のシャーディングデータソースを選択します。タスクの構成方法の詳細については、「コードレス UI での構成」をご参照ください。
説明このトピックでは MySQL (シャーディング) を例として使用します。必要に応じてデータソースタイプを選択できます。

[次へ] をクリックします。
同期したいテーブルを選択し、[保存] と [公開] をクリックして、後続のステップを完了します。

標準データソース + コードレス UI
各シャーディングデータベースを標準データソースとして作成します。このトピックでは MySQL を例として使用します。詳細については、「データソース構成」をご参照ください。

シャーディングされたデータベースとテーブルの同期タスクを構成します。
コードレス UI で、シャーディングされたデータベースとテーブルの同期タスクを構成します。[データソース] セクションで、[+ データソースの編集] をクリックして複数のデータソースを追加します。タスクの構成方法の詳細については、「コードレス UI での構成」をご参照ください。

標準データソースを [選択したデータソース] リストに追加し、[OK] をクリックします。

[次へ] をクリックします。
各データソースについて、同期したいテーブルを選択します。[保存] と [公開] をクリックして、後続のステップを完了します。
重要デフォルトでは、[シャーディングデータソースは同じアカウントとパスワードを使用します] オプションが選択されています。これは、すべてのシャーディングデータソースが、最初のデータソースに構成されたアカウントとパスワードを使用してデータベースにアクセスすることを意味します。シャーディングされたデータベースが異なるアカウントとパスワードを使用する場合は、このオプションの選択を解除してください。このオプションの選択を解除すると、それぞれのデータソースで構成されたアカウントとパスワードが使用されます。

コードエディタ
シャーディングされたデータベースとテーブルの同期タスクを構成します。
次のスクリプト例は、コードエディタモードでシャーディングを構成する方法を示しています。詳細については、「コードエディタでの構成」をご参照ください。
重要コードを実行する前に、コメントを削除してください。
{ "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" } ] } }