すべてのプロダクト
Search
ドキュメントセンター

DataWorks:シャーディングバッチ同期タスクの設定

最終更新日:Sep 22, 2026

DataWorks では、ウィザードモードまたはスクリプトモードでバッチ同期タスクを設定して、シャーディングされたデータベースやテーブルから単一の宛先テーブルにデータを同期できます。このトピックでは、シャーディングされた MySQL データベースからデータを同期する例を紹介します。

前提条件

同期用のデータソースを準備します。詳細については、「サポートされているデータソースと読み取り/書き込みプラグイン」をご参照ください。

概要

以下の方法を使用して、シャーディング用のバッチ同期タスクを作成できます。次の表に、これらの方法の比較を示します。

項目

シャーディングデータソースとコードレス UI (推奨)

標準データソースとコードレス UI

コードエディター

コードレス UI のサポート

はい

はい

いいえ

ルールベースのテーブル名設定

正規表現を使用してソーステーブル名を設定できます。実行時に、タスクは一致するテーブルを検索して同期します。

サポートされていません。

数値範囲を使用してテーブル名を設定できます (例:tb_[1-10])。範囲は連続している必要があり、範囲内の各テーブルが存在している必要があります。

同一テーブルスキーマの要件

欠損フィールドポリシーを設定することで、一部のテーブルにフィールドが欠損していることを許可できます。これらのフィールドは NULL 値として出力されます。

すべてのテーブルが同一のスキーマを持つ必要があります。

カラムマッピングの参照元

シャーディングデータソースのメタデータソース内で、最初に一致したテーブル。

最初のデータソースの最初のテーブル。

スクリプトモードで手動で記述。

サポートされるデータソースの数

シャーディングデータソースは、最大 5,000 個の参照データソースをサポートします。

ノードごとに 50 個以下のデータソースを設定することを推奨します。

データソース追加時のノード変更とデプロイの要否

ノードの変更は不要です。データソースを変更すると、新しく実行されるインスタンスで変更が有効になります。

タスクを変更してデータソースを追加し、そのデータソースのテーブル名を設定する必要があります。

サポートされるデータソースタイプ

MySQL、PolarDB、PolarDB-O、OceanBase

MySQL、PolarDB、AnalyticDB、OceanBase

MySQL、PolarDB、AnalyticDB、SQL Server、Oracle、PostgreSQL、DM、DB2、Oracle、OceanBase

シャーディングデータソースとコードレス UI

  1. [Data Integration] ページに移動します。

    DataWorks コンソールにログインします。 左側のナビゲーションウィンドウで、[Data Integration] をクリックします。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[Data Integrationに移動] をクリックします。

  2. 左側のナビゲーションペインで データソース をクリックし、データソースの追加 をクリックしてデータソースタイプを選択します。この方法は MySQL、PolarDB、PolarDB-O をサポートしています。

  3. 各シャーディングデータベースの標準データソースを作成します。このトピックでは MySQL を例として使用します。詳細な手順については、「MySQLデータソースの設定」をご参照ください。

    作成が完了すると、[データソースリスト] ページで各シャーディングデータベースの MySQL データソースを確認できます。たとえば、データソース名が MySQL_20241114 で、データベース user_info_20241114 に対応する場合です。

  4. [シャーディングデータソース]を作成し、複数の標準データソースを 1 つのデータソースに統合して、データ同期のソースとして使用します。

    1. データソースの追加 をクリックし、[シャーディングデータソース] を選択します。[データソースを追加] ダイアログボックスで、[シャーディングデータソース] タブをクリックします。利用可能なデータソースタイプには、[MySQL (シャーディング)]、[PolarDB-O (シャーディング)]、[PolarDB (シャーディング)] があります。

    2. 必要に応じてシャーディングデータソースのタイプを選択し、関連パラメーターを設定します。このトピックでは MySQL (シャーディング) を例として使用します。

      [データソース名] フィールドに、Database_and_Table_Sharding_of_MySQL などの名前を入力します。設定が完了したら、[OK] をクリックしてシャーディングデータソースを作成します。

      主なパラメーターの説明:

      • データソース名 をカスタマイズします。

      • [データソースの選択]:作成済みの各シャーディングデータベースの標準データソースを選択します。

      • [メタデータソース]:シャーディング同期では、すべてのデータソースが同一のテーブルスキーマを持つ必要があります。同期タスクを設定する際にデフォルトのテーブルスキーマを取得するためのメタデータテンプレートとして、いずれかのデータソースを選択します。

        重要

        データソース間でテーブルスキーマが一致しない場合、後続の同期タスクは失敗します。

  5. バッチ同期ノードの作成

  6. シャーディング同期タスクを設定します。

    ウィザードモードでシャーディングを設定します。データソース で [MySQL (シャーディング)] を選択し、作成したシャーディングデータソースを選択します。完全なタスク設定手順については、「ウィザードモードでのバッチ同期タスクの設定」をご参照ください。

    説明

    このトピックでは MySQL (シャーディング) を例として使用します。ご自身のニーズに基づいて適切なタイプを選択してください。

    ネットワーク接続テストページでは、ソースデータソース名は Database_and_Table_Sharding_of_MySQL、リソースグループは Serveless_Resource (China (Shanghai)、従量課金、0.5 CU)、宛先は MaxCompute (ODPS) で、データソース名は doc_test_project です。ネットワーク接続テストの結果、3 つすべてが接続されていることが示されます。

  7. 次へ をクリックします。

  8. 同期するテーブルを選択し、保存 と 公開 をクリックして、残りの手順を完了します。

    [ソースと宛先の設定] ページのステップ 2 の [タスクの設定] では、左側の [ソース] セクションが次のように設定されます。データソースは [MySQL (シャーディング)]、テーブルの選択方法は [固定テーブル]、テーブルは [user_info]、分割キーは [id] です。(シャーディングでは、すべてのテーブルが同一のスキーマを持つ必要があります。そうでない場合、実行エラーが発生します。) 右側の [宛先] セクションは次のように設定されます。データソースは MaxCompute (ODPS)、テーブルは [user_info]、パーティション情報は pt=${bizdate}、書き込みモードは、書き込み前に既存データをクリア (Insert Overwrite)、空の文字列を NULL に変換する設定は [いいえ] です。

標準データソースとコードレス UI

  1. 各シャーディングデータベースの標準データソースを作成します。このトピックでは MySQL を例として使用します。詳細な手順については、「MySQLデータソースの設定」をご参照ください。

  2. バッチ同期ノードの作成

  3. シャーディング同期タスクを設定します。

    ウィザードモードでシャーディングを設定します。データソース セクションで、[+ ソースを編集] をクリックします。表示されるデータソース選択パネルで、複数のシャーディングデータベースに対応するデータソースを選択して追加します。完全なタスク設定手順については、「ウィザードモードでのバッチ同期タスクの設定」をご参照ください。

  4. 選択済みのデータソース に複数の標準データソースを追加し、OK をクリックします。

  5. 次へ をクリックします。

  6. 各データソースから同期するテーブルを選択し、保存 と 公開 をクリックして、残りの手順を完了します。

    重要

    この設定では、デフォルトで シャーディングデータソースは同じアカウントとパスワードを使用します オプションが選択されています。これは、すべてのシャーディングデータソースが、最初のデータソースで設定されたアカウントとパスワードを使用してデータベースにアクセスすることを意味します。シャーディングデータベースが異なるアカウントとパスワードを使用する場合は、このオプションの選択を解除して、各データソースが独自のアカウントとパスワードを使用するようにします。

    [ソースと宛先の設定] ページでは、左側の [ソース] セクションに 3 つの MySQL シャーディングデータソース (MySQL_20241112、MySQL_20241114、MySQL_20241113 など) が設定されており、各データソースで user_info テーブルが選択されています。ページには「シャーディングでは、すべてのテーブルが同一のスキーマを持つ必要があります。そうでない場合、実行エラーが発生します。」という警告が表示されます。右側の [宛先] セクションでは MaxCompute (ODPS) データソースが選択され、テーブルは user_info、パーティション情報は pt=${bizdate} に設定され、書き込みモードは、書き込み前に既存データをクリア (Insert Overwrite) です。

コードエディター

  1. バッチ同期ノードの作成

  2. シャーディング同期タスクを設定します。

    スクリプトモードでシャーディングを設定します。以下にスクリプトの例を示します。完全なタスク設定手順については、「スクリプトモードでのバッチ同期タスクの設定」をご参照ください。

    重要

    タスクを実行する前に、以下のコードからコメントを削除してください。

    {
        "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"
                    }
            ]
        }
    }