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

DataWorks:MySQL データソース

最終更新日:Aug 06, 2026

MySQL データソースは、Data Integration を介して MySQL データベースとデータを同期するための双方向の読み取りおよび書き込みチャネルを提供します。

サポートされている MySQL バージョン

  • オフラインの読み取りと書き込み:

    MySQL 5.5.x、5.6.x、5.7.x、および 8.0.x をサポートします。Amazon RDS for MySQL、Azure Database for MySQL、および Amazon Aurora MySQL と互換性があります。

    オフライン同期ではビューからの読み取りが可能です。

  • リアルタイム読み取り:

    Data Integration は、リアルタイムサブスクリプションを使用して MySQL からデータを読み取ります。MySQL バージョン 5.5.x、5.6.x、5.7.x、および 8.0.x のリアルタイム同期をサポートしますが、関数インデックスなどの新しい MySQL 8.0 の機能はサポートしていません。この機能は、Amazon RDS for MySQL、Azure Database for MySQL、および Amazon Aurora MySQL とも互換性があります。

    重要

    DRDS からデータを同期する必要がある場合は、MySQL データソースとして設定しないでください。代わりに、直接 DRDS データソースとして設定します。手順については、「DRDS データソースの設定」をご参照ください。

制限事項

リアルタイム同期

  • 5.6.x より前のバージョンを実行している MySQL の読み取り専用インスタンスからはデータを同期できません。

  • 関数インデックスを含むテーブルの同期はサポートされていません。

  • XA ROLLBACK はサポートされていません。

    XA PREPARE 状態のトランザクションの場合、リアルタイム同期はデータを送信先に書き込みます。XA ROLLBACK コマンドが発行された場合、リアルタイム同期は準備されたデータをロールバックしません。このシナリオに対処するには、リアルタイム同期タスクから手動でテーブルを削除し、再度追加して再同期する必要があります。

  • MySQL サーバーのバイナリログフォーマットは ROW に設定する必要があります。

  • リアルタイム同期は、関連テーブルのカスケード削除を同期しません。

  • Amazon Aurora MySQL データベースの場合、プライマリ/ライターインスタンスに接続する必要があります。Aurora MySQL の読み取り専用レプリカでは Binlog 機能を有効にできず、リアルタイム同期タスクでは増分更新のために Binlog が必要です。

  • MySQL テーブルのオンライン DDL 変更では、リアルタイム同期は Data Management Service (DMS) を介した列の追加 (Add Column) のみをサポートしています。

  • MySQL からのストアドプロシージャの読み取りはサポートされていません。

オフライン同期

  • MySQL Reader プラグインを使用してシャーディングされたデータベースから複数のテーブルを同期する場合、テーブル分割を有効にするには、同時実行数をテーブル数より大きい値に設定する必要があります。そうしないと、システムはテーブルごとに 1 つのタスクを作成します。

  • MySQL からのストアドプロシージャの読み取りはサポートされていません。

サポートされているデータ型

各バージョンの MySQL データ型の完全なリストについては、MySQL 公式ドキュメントをご参照ください。次の表は、MySQL 8.0.x を例として、主要なデータ型のサポート状況を示しています。

型

オフライン読み取り (MySQL Reader)

オフライン書き込み (MySQL Writer)

リアルタイム読み取り

リアルタイム書き込み

TINYINT

サポート

サポート

サポート

サポート

SMALLINT

サポート

サポート

サポート

サポート

INTEGER

サポート

サポート

サポート

サポート

BIGINT

サポート

サポート

サポート

サポート

FLOAT

サポート

サポート

サポート

サポート

DOUBLE

サポート

サポート

サポート

サポート

DECIMAL/NUMERIC

サポート

サポート

サポート

サポート

REAL

非サポート

非サポート

非サポート

非サポート

VARCHAR

サポート

サポート

サポート

サポート

JSON

サポート

サポート

サポート

サポート

TEXT

サポート

サポート

サポート

サポート

MEDIUMTEXT

サポート

サポート

サポート

サポート

LONGTEXT

サポート

サポート

サポート

サポート

VARBINARY

サポート

サポート

サポート

サポート

BINARY

サポート

サポート

サポート

サポート

TINYBLOB

サポート

サポート

サポート

サポート

MEDIUMBLOB

サポート

サポート

サポート

サポート

LONGBLOB

サポート

サポート

サポート

サポート

ENUM

サポート

サポート

サポート

サポート

SET

サポート

サポート

サポート

サポート

BOOLEAN

サポート

サポート

サポート

サポート

BIT

サポート

サポート

サポート

サポート

DATE

サポート

サポート

サポート

サポート

DATETIME

サポート

サポート

サポート

サポート

TIMESTAMP

サポート

サポート

サポート

サポート

TIME

サポート

サポート

サポート

サポート

YEAR

サポート

サポート

サポート

サポート

LINESTRING

非サポート

非サポート

非サポート

非サポート

POLYGON

非サポート

非サポート

非サポート

非サポート

MULTIPOINT

非サポート

非サポート

非サポート

非サポート

MULTILINESTRING

非サポート

非サポート

非サポート

非サポート

MULTIPOLYGON

非サポート

非サポート

非サポート

非サポート

GEOMETRYCOLLECTION

非サポート

非サポート

非サポート

非サポート

説明

データが MySQL の DATE 列に格納されると、MySQL は自動的に日付値を yyyy-mm-dd 形式に正規化します。たとえば、yyyymmdd 形式のソース日付値 20260423 は 2026-04-23 に変換されます。これは MySQL の組み込みメカニズムであり、DataWorks の同期タスク設定には依存しません。元の形式を保持する必要がある場合は、送信先テーブルのフィールドタイプを VARCHAR に変更してください。

前提条件

DataWorks にデータソースとして追加する前に、MySQL 環境を準備して、データ同期タスクが正しく実行されるようにしてください。

以下の前提条件を完了してください。

MySQL バージョンの確認

Data Integration は特定の MySQL バージョンのみをサポートします。詳細については、「サポートされている MySQL バージョン」セクションをご参照ください。次のコマンドを実行して MySQL のバージョンを確認してください:

SELECT version();

アカウント権限の設定

DataWorks データソースアクセス専用の MySQL アカウントを作成することを推奨します。

  1. オプション:アカウントの作成

    詳細な手順については、「MySQL アカウントの作成」をご参照ください。

  2. 権限の付与

    • バッチ

      バッチ同期シナリオでは:

      • MySQL からデータを読み取るには、アカウントに同期したいテーブルに対する読み取り (SELECT) 権限が必要です。

      • MySQL にデータを書き込むには、アカウントに同期したいテーブルに対する書き込み (INSERT、DELETE、および UPDATE) 権限が必要です。

      説明

      MySQL からデータを読み取って同期するだけで、データを書き戻す必要がない場合は、アカウントに SELECT 権限を付与するだけで十分です。INSERT、DELETE、および UPDATE 権限は読み取り専用の同期には必要ありません。

    • リアルタイム

      リアルタイム同期シナリオでは、アカウントにデータベースに対する SELECT、REPLICATION SLAVE、および REPLICATION CLIENT 権限が必要です。

    次のコマンドを実行して、必要な権限を付与できます。または、アカウントに SUPER 権限を付与することもできます。次のコマンドで、'sync_account' を作成したアカウントの名前に置き換えてください。

    -- オプション:任意のホスト ('%') から接続できる同期アカウントを作成します。
    -- CREATE USER 'sync_account'@'%' IDENTIFIED BY 'your_password'; 
    -- 同期アカウントに必要な権限を付与します。
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'sync_account'@'%';

    *.* 構文は、すべてのデータベースのすべてのテーブルに対する権限を付与します。特定のデータベースの特定のテーブルに対する権限を付与することもできます。たとえば、test データベースの user テーブルに権限を付与するには、次のコマンドを実行します:GRANT SELECT, REPLICATION CLIENT ON test.user TO 'sync_account'@'%';。

    説明

    REPLICATION SLAVE 権限はグローバル権限であり、特定のデータベースやテーブルに対して付与することはできません。

MySQL binlog の有効化 (リアルタイム同期のみ)

Data Integration は、MySQL の binlog をサブスクライブすることで、リアルタイムの増分データ同期を実行します。DataWorks で同期タスクを設定する前に、MySQL の binlog を有効にする必要があります。

重要
  • binlog が消費されている場合、データベースはそれを削除できません。リアルタイム同期タスクの遅延が大きいと、binlog の削除が遅れ、ディスク領域を使い果たす可能性があります。タスクに遅延アラートを設定し、データベースのディスク領域をモニタリングすることを推奨します。

  • binlog は少なくとも 72 時間保持してください。タスクが失敗し、binlog が利用できなくなった場合、障害発生前の位置にチェックポイントをリセットできなくなり、データ損失の原因となる可能性があります。この場合、バッチ同期を使用してデータをバックフィルする必要があります。

  1. binlog が有効になっているか確認します。

    • 次の文を実行して、binlog が有効になっているか確認します。

      SHOW variables LIKE "log_bin";

      返された値が ON の場合、binlog は有効です。

    • レプリカデータベースの binlog ステータスを確認するには、次の文を実行します。

      SHOW variables LIKE "log_slave_updates";

      返された値が ON の場合、レプリカデータベースで binlog が有効になっています。

    返された値が期待どおりでない場合:

  2. binlog フォーマットを確認します。

    次の文を実行して、binlog フォーマットを確認します。

    SHOW variables LIKE "binlog_format";

    考えられる戻り値:

    • 戻り値が ROW の場合、有効な binlog フォーマットは ROW です。

    • STATEMENT:binlog フォーマットは STATEMENT です。

    • MIXED:binlog フォーマットは MIXED です。

    重要

    DataWorks のリアルタイム同期は ROW フォーマットのみをサポートします。返された値が ROW でない場合は、binlog_format の設定を変更する必要があります。

  3. 完全な行イメージがログに記録されているか確認します。

    行イメージの設定を確認するには、以下の文を実行します。

    SHOW variables LIKE "binlog_row_image";

    返される値:

    • FULL:完全な行イメージがログに記録されます。

    • MINIMAL:完全な行イメージの代わりに、最小限の行イメージがログに記録されます。

    重要

    DataWorks のリアルタイム同期は、binlog で完全な行イメージが有効になっている MySQL サーバーにのみ対応しています。 戻り値が FULL でない場合は、binlog_row_image の設定を変更する必要があります。

OSS binlog 読み取り権限の設定

MySQL データソースを追加する際に、構成パターン を ApsaraDB RDS に設定し、ご利用の RDS for MySQL インスタンスが DataWorks ワークスペースと同じリージョンにある場合、[OSS から binlog を読み取る] を有効にできます。これにより、RDS for MySQL の binlog への直接アクセスが失敗した場合でも、DataWorks は OSS から binlog をフェッチし、リアルタイム同期タスクの中断を防ぎます。

[OSS binlog アクセス ID] に RAM ユーザー または RAM ロール を使用する場合は、必要な権限も付与する必要があります。

  • RAM ユーザー

    1. Resource Access Management (RAM) コンソールにログインし、[ユーザー] ページに移動して、対象の RAM ユーザーを見つけます。

    2. 操作 列で、[ポリシーをアタッチ] をクリックします。

    3. 次のパラメーターを設定し、[OK] をクリックします。

      • スコープ:Alibaba Cloud アカウント

      • アクセスポリシー:システムポリシー

      • ポリシー名:AliyunDataWorksAccessingRdsOSSBinlogPolicy

  • RAM ロール

    1. Resource Access Management (RAM) コンソールにログインし、RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールの作成」をご参照ください。

      主要なパラメーター:

      • 信頼できるエンティティの選択:Alibaba Cloud アカウント

      • アカウントの選択:他の Alibaba Cloud アカウント。DataWorks ワークスペースを所有する Alibaba Cloud アカウントの ID を入力します。

      • ロール名:カスタム名を入力します。

    2. RAM ロールに権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。

      主要なパラメーター:

      • アクセスポリシー:システムポリシー

      • ポリシー名:AliyunDataWorksAccessingRdsOSSBinlogPolicy

    3. RAM ロールの信頼ポリシーを変更します。詳細については、「RAM ロールの信頼ポリシーの編集」をご参照ください。

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [
                          "di.dataworks.aliyuncs.com",
                          "dataworks.aliyuncs.com"
                      ]
                  }
              }
          ],
          "Version": "1"
      }

データソースの追加

Alibaba Cloud インスタンスモード

MySQL データベースが Alibaba Cloud RDS インスタンスで実行されている場合は、Alibaba Cloud インスタンスモードでデータソースを作成することを推奨します。パラメーターを次のように設定します:

パラメーター

説明

データソース名

データソース名はワークスペース内で一意である必要があります。ビジネスと環境を明確に識別できる名前を使用することを推奨します。例:rds_mysql_order_dev。

[接続モード]

Alibaba Cloud インスタンスモードを選択します。接続モードの詳細については、「シナリオ 1:インスタンスモード (現在のクラウドアカウント)」および「シナリオ 2:インスタンスモード (他のクラウドアカウント)」をご参照ください。

所属 Alibaba Cloud アカウント

インスタンスが属するクラウド アカウントを選択します。その他の Alibaba Cloud アカウント を選択した場合は、クロスアカウント権限を設定する必要があります。詳細については、「クロスアカウント承認 (RDS、Hive、または Kafka)」をご参照ください。

他のクラウドアカウントを選択した場合は、次の情報を提供します:

  • メインアカウント ID:インスタンスを所有するメインアカウントの ID。

  • RAM ロール名:他のクラウドアカウントによって提供される RAM ロール。このロールには、ターゲットインスタンスにアクセスするために必要な権限が必要です。

リージョン

インスタンスのリージョン。

インスタンス

接続するインスタンスの名前を選択します。

セカンダリデータベースの設定

RDS インスタンスに 読み取り専用インスタンス (スタンバイインスタンス) がある場合は、そこからデータを読み取るようにタスクを設定できます。これにより、読み取り操作がプライマリインスタンスのパフォーマンスに影響を与えるのを防ぐことができます。

インスタンスアドレス

正しいインスタンスを選択した後、[最新のアドレスを取得] をクリックして、パブリック/プライベートアドレス、VPC、vSwitch などの情報を表示します。

データベース

データソースが接続するデータベースの名前。指定されたユーザーがこのデータベースにアクセスするために必要な権限を持っていることを確認してください。

対応するアクセスアイデンティティ

DataWorks が MySQL にアクセスするために使用する認証情報ソースを選択します。以下のオプションがサポートされています:

  • ユーザー名とパスワード:MySQL データベースのユーザー名とパスワードを入力します。 DataWorks は、これらの情報を対称暗号化によって保存します。 RDS インスタンスを使用する場合、インスタンスの[アカウント管理]セクションで、それらを作成・管理できます。

  • Key Management Service:Alibaba Cloud Key Management Service (KMS) でホストされている汎用シークレットを使用します。まず KMS で汎用シークレットを作成する必要があります。詳細については、「汎用シークレットの管理と使用」をご参照ください。次に、データソースで KMS 汎用シークレットが存在する Kms リージョンを選択し、KMS リストからターゲットの汎用シークレットを選択します。KMS 汎用シークレットの内容は、次の 2 つの JSON 形式をサポートしています:

    { "username": "biz_rw", "password": "S3cr3t!" }
    { "AccessKeyId": "LTAI...", "AccessKeySecret": "..." }
    説明

    KMS 汎用シークレットの内容が変更された後、DataWorks は最大 5 分間シークレットをキャッシュします。新しいシークレットは遅くとも 5 分以内に有効になります。

OSS binlog 読み取りをサポート

有効にすると、RDS binlog にアクセスできない場合に DataWorks は OSS から binlog を取得しようとします。これにより、リアルタイム同期タスクの中断を防ぎます。詳細については、「OSS binlog の読み取り権限の設定」をご参照ください。権限付与の設定に基づいて、OSS binlog アクセス ID を設定します。

認証オプション

認証なしまたは SSL 認証を選択します。SSL 認証を選択する場合は、インスタンスでも有効になっていることを確認してください。証明書ファイルを準備し、認証ファイル管理 にアップロードします。

バージョン

MySQL サーバーにログインし、SELECT VERSION() クエリを実行してバージョン番号を確認します。

接続文字列モード

より柔軟な設定のために、接続文字列モードを使用してデータソースを作成することもできます。パラメーターを次のように設定します:

パラメーター

説明

データソース名

データソース名はワークスペース内で一意である必要があります。ビジネスと環境を明確に識別できる名前を使用することを推奨します。例:rds_mysql_order_dev。

[接続モード]

パブリック IP あり を選択します。このモードでは、JDBC URL を使用してデータベースに接続します。

接続文字列プレビュー

接続アドレスとデータベース名を入力すると、DataWorks は自動的に JDBC URL のプレビューを生成します。

エンドポイント

ホストアドレス:データベースサーバーの実際のアクセスアドレスを入力します。アドレスが DataWorks リソースグループからネットワークアクセス可能であることを確認してください。一般的なシナリオは次のとおりです:

  • 同じ VPC 内でのアクセス:内部 (プライベート) IP アドレスを入力します。

  • インターネットまたは NAT ゲートウェイ経由でのアクセス:パブリック IP アドレスまたは NAT IP アドレスを入力します。

データベースが Alibaba Cloud RDS インスタンスの場合、インスタンス詳細の [データベース接続] ページでアドレスを見つけることができます。

ポート番号:データベースのポート。デフォルト値は 3306 です。

データベース名

データソースが接続するデータベースの名前。指定されたユーザーがこのデータベースにアクセスするために必要な権限を持っていることを確認してください。

対応するアクセスアイデンティティ

DataWorks が MySQL にアクセスするために使用する認証情報ソースを選択します。以下のオプションがサポートされています:

  • ユーザー名とパスワード: MySQL データベースのユーザー名とパスワードを入力します。DataWorks は、これらを対称暗号化で保存します。RDS インスタンスを使用する場合、インスタンスの[アカウント管理]セクションで作成および管理できます。

  • Key Management Service:Alibaba Cloud Key Management Service (KMS) でホストされている汎用シークレットを使用します。まず KMS で汎用シークレットを作成する必要があります。詳細については、「汎用シークレットの管理と使用」をご参照ください。次に、データソースで KMS 汎用シークレットが存在する Kms リージョンを選択し、KMS リストからターゲットの汎用シークレットを選択します。KMS 汎用シークレットの内容は、次の 2 つの JSON 形式をサポートしています:

    { "username": "biz_rw", "password": "S3cr3t!" }
    { "AccessKeyId": "LTAI...", "AccessKeySecret": "..." }
    説明

    KMS 汎用シークレットの内容が変更された後、DataWorks は最大 5 分間シークレットをキャッシュします。新しいシークレットは遅くとも 5 分以内に有効になります。

バージョン

MySQL サーバーにログインし、SELECT VERSION() クエリを実行してバージョン番号を確認します。

認証オプション

認証なしまたは SSL 認証を選択します。SSL 認証を選択する場合は、インスタンスでも有効になっていることを確認してください。証明書ファイルを準備し、認証ファイル管理 にアップロードします。

高度なパラメータ

パラメーター:ドロップダウンリストからサポートされているパラメーターを選択します。例:connectTimeout。

値:選択したパラメーターに適切な値を入力します。例:3000。

JDBC URL は自動的に更新されます:jdbc:mysql://192.168.90.28:3306/test?connectTimeout=3000。

たとえば、タイムゾーン関連のエラーが発生した場合やタイムゾーンを指定する必要がある場合は、[プロパティを追加] をクリックし、パラメーターとして serverTimezone を選択し、Asia/Shanghai などのターゲットタイムゾーンを入力します。データソース設定を保存し、タスクを再実行します。

重要

DataWorks リソースグループがデータベースに接続できることを確認してください。そうしないと、後続のタスクは失敗します。ネットワーク設定は、データベース環境とデータソースの接続モードによって異なります。詳細については、「接続性のテスト」をご参照ください。

MySQL 同期ワークフロー

同期タスクの設定のエントリーポイントと手順については、以下の設定ガイドをご参照ください。

単一テーブルのオフライン同期の設定

単一テーブルのリアルタイム同期の設定

手順については、「リアルタイム同期タスクの設定 (レガシー)」をご参照ください。

データベース全体の同期の設定

手順については、「データベース全体のリアルタイム同期タスクの設定」をご参照ください。

よくある質問

その他の一般的な Data Integration の問題については、「Data Integration よくある質問」をご参照ください。

付録:MySQL スクリプトの例とパラメーター

コードエディタを使用したバッチ同期タスクの設定

コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプト形式の要件に基づいて、スクリプト内の関連パラメーターを設定する必要があります。詳細については、「スクリプトモードでの設定」をご参照ください。以下の情報は、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明しています。

Reader スクリプトの例

以下の例は、単一データベース内の単一テーブルと、シャーディングされたテーブルの設定を示しています。

説明

以下の JSON の例に含まれるコメントは、説明のみを目的としています。スクリプトを実行する前にコメントを削除してください。

  • 単一データベース内の単一テーブル

    {
      "type": "job",
      "version": "2.0",// バージョン番号。
      "steps": [
        {
          "stepType": "mysql",// コネクタ名。
          "parameter": {
            "column": [// 読み取る列。
              "id"
            ],
            "connection": [
              {
                "querySql": [
                  "select a,b from join1 c join join2 d on c.id = d.id;"
                ],
                "datasource": ""// データソース名。
              }
            ],
            "where": "",// フィルター条件。
            "splitPk": "",// シャードキー。
            "encoding": "UTF-8"// エンコード形式。
          },
          "name": "Reader",
          "category": "reader"
        },
        {
          "stepType": "stream",
          "parameter": {},
          "name": "Writer",
          "category": "writer"
        }
      ],
      "setting": {
        "errorLimit": {
          "record": "0"// 許容されるダーティデータの最大レコード数。
        },
        "speed": {
          "throttle": true,// レート制限を有効にする場合は true に設定します。false の場合、レート制限は無効になり、'mbps' パラメーターは無視されます。
          "concurrent": 1,// 並行スレッド数。
          "mbps": "12"// レート制限。1 mbps = 1 MB/s。
        }
      },
      "order": {
        "hops": [
          {
            "from": "Reader",
            "to": "Writer"
          }
        ]
      }
    }
  • シャーディングされたテーブル

    説明

    MySQL Reader は、同じスキーマを持つ複数の MySQL テーブルからデータを読み取ることができます。この文脈での「シャーディングされたテーブル」とは、複数のソーステーブルのデータが単一の送信先テーブルに書き込まれるシナリオを指します。データベースレベルでシャーディングされたテーブルを同期するには、Data Integration でタスクを作成し、データベース全体のシャーディング機能を選択します。

    {
      "type": "job",
      "version": "2.0",
      "steps": [
        {
          "stepType": "mysql",
          "parameter": {
            "indexes": [
              {
                "type": "unique",
                "column": [
                  "id"
                ]
              }
            ],
            "envType": 0,
            "useSpecialSecret": false,
            "column": [
              "id",
              "buyer_name",
              "seller_name",
              "item_id",
              "city",
              "zone"
            ],
            "tableComment": "テスト注文テーブル",
            "connection": [
              {
                "datasource": "rds_dataservice",
                "table": [
                  "rds_table"
                ]
              },
              {
                "datasource": "rds_workshop_log",
                "table": [
                  "rds_table"
                ]
              }
            ],
            "where": "",
            "splitPk": "id",
            "encoding": "UTF-8"
          },
          "name": "Reader",
          "category": "reader"
        },
        {
          "stepType": "odps",
          "parameter": {},
          "name": "Writer",
          "category": "writer"
        },
        {
          "name": "Processor",
          "stepType": null,
          "category": "processor",
          "copies": 1,
          "parameter": {
            "nodes": [],
            "edges": [],
            "groups": [],
            "version": "2.0"
          }
        }
      ],
      "setting": {
        "executeMode": null,
        "errorLimit": {
          "record": ""
        },
        "speed": {
          "concurrent": 2,
          "throttle": false
        }
      },
      "order": {
        "hops": [
          {
            "from": "Reader",
            "to": "Writer"
          }
        ]
      }
    }

Reader パラメーター

パラメーター

説明

必須

デフォルト

datasource

読み取り元のデータソースの名前。これはコードエディタで設定されたデータソースと一致する必要があります。

はい

なし

table

同期するソーステーブルの名前。Data Integration タスクは、1 つの論理テーブルからのみデータを読み取ることができます。

table パラメーターの高度なパターンの使用例を以下に示します:

  • 範囲を指定することで、シャーディングされたテーブルから読み取ることができます。たとえば、'table_[0-99]' は 'table_0'、'table_1'、'table_2' から 'table_99' までを読み取ります。

  • テーブル名の数値サフィックスの長さが一定の場合、たとえば 'table_000'、'table_001'、'table_002' から 'table_999' までの場合、'"table":["table_00[0-9]","table_0[10-99]","table_[100-999]"]' のように設定できます。

説明

タスクは、column パラメーターで指定された列を、パターンに一致するすべてのテーブルから読み取ります。一致したテーブルまたは指定された列が存在しない場合、タスクは失敗します。

はい

なし

column

ソーステーブルから読み取る列を指定する JSON 配列。すべての列を選択するには、["*"] を使用します。

  • 列プルーニング:列のサブセットをエクスポートできます。

  • 列の並べ替え:テーブルスキーマとは異なる順序で列をエクスポートできます。

  • 定数値:定数値を設定できます。値は MySQL SQL 構文に従う必要があります。例:["id","`table`","1","'mingya.wmy'","'null'","to_char(a+1)","2.3",true]。

    • id は通常の列名です。

    • `table` は予約キーワードである列名です。

    • 1 は整数定数です。

    • 'mingya.wmy' は文字列定数です。単一引用符で囲む必要があります。

    • null 値の処理:

      • " " は単一のスペースを含む文字列を表します。

      • null は NULL 値を表します。

      • 'null' はリテラル文字列 "null" を表します。

    • to_char(a+1) は文字列変換関数です。

    • 2.3 は浮動小数点数です。

    • true はブール値です。

  • column パラメーターで列を明示的に指定する必要があります。空にすることはできません。

はい

なし

splitPk

MySQL Reader がデータを抽出する際に、splitPk パラメーターを指定すると、指定されたフィールドでデータシャーディングが有効になります。その後、Data Integration は同時実行タスクを起動して同期効率を向上させます。

  • 最高のパフォーマンスを得るには、テーブルのプライマリキーを splitPk として使用します。

  • 現在、splitPk は整数型のデータ分割のみをサポートしています。文字列、浮動小数点、日付などの他の型はサポートしていません。サポートされていないデータ型を指定した場合、splitPk 機能は無視され、単一チャネルで同期が行われます。

  • splitPk が指定されていないか、その値が空の場合、テーブルは単一チャネルで同期されます。

いいえ

なし

splitFactor

シャーディング係数。このパラメーターは、作成されるシャードの数を制御します。同時実行が有効な場合、データは concurrency × splitFactor 個のシャードに分割されます。たとえば、同時実行数が 5 で splitFactor が 5 の場合、データは 25 個のシャードに分割され、5 つの並行スレッドで処理されます。

説明

推奨範囲:1 から 100。大きすぎる値は、メモリ不足 (OOM) エラーを引き起こす可能性があります。

いいえ

5

where

フィルター条件。一般的なシナリオでは、現在の日付のデータのみを同期するために、where 条件を gmt_create > $bizdate に設定できます。

  • where 句を使用すると、効果的に増分同期を実行できます。where 文を指定しない場合 (where のキーや値を提供しない場合を含む)、データ同期は完全なデータ同期として扱われます。

  • LIMIT 10 のような句は、MySQL の WHERE 句では無効なため、使用しないでください。

いいえ

なし

querySql (コードエディタでのみ利用可能。コードレス UI ではサポートされていません。)

一部のユースケースでは、where パラメーターだけでは必要なフィルタリングに不十分な場合があります。このパラメーターを使用して、カスタム SQL クエリを定義します。設定すると、システムは tables、columns、および splitPk パラメーターを無視し、このクエリを直接使用します。たとえば、複数テーブルの結合からデータを同期するには、select a,b from table_a join table_b on table_a.id = table_b.id を使用します。querySql パラメーターは table、column、where、および splitPk よりも優先されます。datasource は、ユーザー名やパスワードなどの情報を解析するために使用されます。

説明

querySql パラメーターは大文字と小文字を区別します。たとえば、querysql (小文字) は効果がありません。

いいえ

なし

useSpecialSecret

複数のソースデータソースが設定されている場合に、各データソースのパスワードを使用するかどうかを指定します。有効な値:

  • true

  • false

複数のソースデータソースが異なるユーザー名とパスワードを持つ場合、このパラメーターを true に設定して、それぞれのデータソースの認証情報を使用します。

いいえ

false

Writer スクリプトの例

{
  "type": "job",
  "version": "2.0",// バージョン番号。
  "steps": [
    {
      "stepType": "stream",
      "parameter": {},
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "mysql",// コネクタ名。
      "parameter": {
        "postSql": [],// タスク後に実行する SQL ステートメント。
        "datasource": "",// データソース名。
        "column": [// 書き込む列。
          "id",
          "value"
        ],
        "writeMode": "insert",// 書き込みモード。有効な値:insert、replace、update。
        "batchSize": 1024,// バッチあたりのレコード数。
        "table": "",// 送信先テーブル名。
        "nullMode": "skipNull",// NULL 値の処理ポリシー。
        "skipNullColumn": [// NULL 値をスキップする列。
          "id",
          "value"
        ],
        "preSql": [
          "delete from XXX;"// タスク前に実行する SQL ステートメント。
        ]
      },
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting": {
    "errorLimit": {// 許容されるダーティデータの最大レコード数。
      "record": "0"
    },
    "speed": {
      "throttle": true,// レート制限を有効にする場合は true に設定します。false の場合、レート制限は無効になり、'mbps' パラメーターは無視されます。
      "concurrent": 1,// 並行スレッド数。
      "mbps": "12"// データベースへの過剰な I/O 圧力を防ぐための MB/s 単位のレート制限。1 mbps = 1 MB/s。
    }
  },
  "order": {
    "hops": [
      {
        "from": "Reader",
        "to": "Writer"
      }
    ]
  }
}

Writer パラメーター

パラメーター

説明

必須

デフォルト

datasource

送信先データソースの名前。これはコードエディタで設定されたデータソースと一致する必要があります。

はい

なし

table

送信先テーブルの名前。

はい

なし

writeMode

書き込みモード。サポートされているオプションは、MySQL の INSERT INTO、ON DUPLICATE KEY UPDATE、および REPLACE INTO ステートメントに対応しています:

  • insert:プライマリキーまたは一意なインデックスの競合が発生した場合、タスクは競合する行を書き込まず、ダーティデータとして記録します。

    スクリプトモードでタスクを設定する場合、writeMode を insert に設定します。

  • on duplicate key update:プライマリキーまたは一意なインデックスとの競合がない場合、ステートメントは insert into と同じように動作します。競合が発生した場合、ステートメントは指定されたフィールドの値を新しい行の値で更新し、データを MySQL に書き込みます。

    スクリプトモードでタスクを設定する場合、writeMode を update に設定します。

  • replace into:プライマリキーまたは一意なインデックスとの競合がない場合、insert into と同じように動作します。競合が発生した場合、まず元の行を削除してから新しい行を挿入します。これは、新しい行が元の行のすべてのフィールドを置き換えることを意味します。

    スクリプトモードでタスクを設定する場合、writeMode を replace に設定します。

いいえ

insert

nullMode

ソースからの NULL 値の処理ポリシーを指定します。有効な値:

  • writeNull:ソースフィールドが NULL の場合、送信先フィールドに NULL 値が書き込まれます。

  • skipNull:ソースフィールドが NULL の場合、送信先フィールドは書き込み操作から省略され、データベースのデフォルト値が適用されます。デフォルト値が定義されていない場合、結果は通常 NULL になります。skipNullColumn パラメーターで適用する列を指定する必要があります。

重要

skipNull として設定すると、タスクは送信先でのデフォルト値をサポートするために、データを書き込むための SQL ステートメントを動的に構築します。これにより、FLUSH 操作の数が増加し、同期速度が低下します。最悪の場合、タスクはデータレコードごとに 1 回 FLUSH します。

いいえ

writeNull

skipNullColumn

nullMode が skipNull に設定されている場合、このパラメーターで指定された列は NULL に強制されません。代わりに、利用可能な場合はそれぞれのデフォルト値が使用されます。

フォーマット:["c1","c2",...]。指定された列 (c1 や c2 など) は、column パラメーターで定義された列のサブセットである必要があります。

いいえ

タスクに設定されたすべての列。

column

書き込む送信先列を、文字列の JSON 配列として指定します。例:"column":["id","name","age"]。スキーマ順にすべての列に書き込むには、アスタリスク (*) を使用します。例:"column":["*"]。

はい

なし

preSql

同期タスクが開始される前に実行する 1 つ以上の SQL ステートメント。コードレス UI は 1 つのステートメントのみをサポートし、コードエディタは複数サポートします。たとえば、テーブルから既存のデータをクリアできます:TRUNCATE TABLE tablename。

説明

複数の SQL ステートメントに対するトランザクションはサポートされていません。

いいえ

なし

postSql

同期タスクが完了した後に実行する 1 つ以上の SQL ステートメント。コードレス UI は 1 つのステートメントのみをサポートし、コードエディタは複数サポートします。たとえば、次のステートメントを使用してタイムスタンプ列を追加できます:ALTER TABLE tablename ADD colname TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

説明

複数の SQL ステートメントに対するトランザクションはサポートされていません。

いいえ

なし

batchSize

書き込みバッチあたりのレコード数。値が大きいほどネットワークのラウンドトリップが減り、スループットが向上する可能性がありますが、値を高く設定しすぎるとメモリ不足 (OOM) エラーが発生する可能性があります。

いいえ

256

updateColumn

writeMode が update に設定されている場合、このパラメーターはプライマリキーまたは一意なインデックスの競合が発生したときに更新する列を指定します。列を JSON 配列で指定します。例:"updateColumn":["name","age"]。

いいえ

なし