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

DataWorks:MaxCompute データソース

最終更新日:Jul 29, 2026

MaxCompute データソースは、MaxCompute との間でデータの読み書きを行う双方向チャネルを提供するデータハブです。

機能

説明

DataWorks の MaxCompute データソースは、トンネルエンドポイントを使用して MaxCompute プロジェクトのトンネルサービスにアクセスします。これにより、プロジェクトへのデータのアップロードまたはダウンロードによるデータ同期が可能になります。トンネルサービスを介したアップロードとダウンロードには、DownloadTable 操作が含まれます。

2023年12月11日以降に作成された MaxCompute データソースの場合、DataWorks サービスとターゲットの MaxCompute プロジェクトが異なるリージョンにある場合、トンネルエンドポイントを使用して直接データを同期することはできません。まず Cloud Enterprise Network (CEN) インスタンスを購入してネットワーク接続を確立する必要があります。リージョン間のデータ同期は、接続が確立された後にのみ可能です。CEN とその操作の詳細については、「Cloud Enterprise Network (CEN)」をご参照ください。

バッチ読み取り

  • MaxCompute Reader は、パーティションテーブルと非パーティション化テーブルからのデータ読み取りをサポートしますが、仮想ビューや外部テーブルからの読み取りはサポートしません。

  • MaxCompute パーティションテーブルからバッチ読み取りを実行する場合、パーティションキー列のフィールドマッピングを直接設定することはできません。パーティションキーの値を同期するには、カスタムフィールドを追加し、パーティション名を手動で入力してから、フィールドマッピングを設定します。

  • スケジューリングパラメーターを使用してパーティション値を指定し、自動置換を有効にすることで、スケジューリング時間に基づいて対応するパーティションからデータが同期されるようにできます。

    たとえば、t0 という名前のパーティションテーブルに id 列と name 列が含まれているとします。レベル 1 のパーティションキーは pt で、レベル 2 のパーティションキーは ds です。pt=<業務日> かつ ds=hangzhou のパーティションからデータを読み取るには、ソースを設定する際にパーティション値を pt=${スケジューリングパラメーター} および ds=hangzhou として指定する必要があります。その後、id 列と name 列の列マッピングを設定できます。

  • パーティションキー列をカスタムフィールドとして追加することで、宛先テーブルに書き込むことができます。

  • MaxCompute Reader は、WHERE 句を使用したデータフィルタリングをサポートします。

バッチ書き込み

  • MaxCompute Writer は、ソースデータに null 値が含まれている場合、VARCHAR データ型をサポートしません。

  • 宛先テーブルが DeltaTable の場合は、詳細設定 を展開し、同期完了後、表示されます。 を はい に設定します。そうしないと、同時実行数が 1 より大きい場合にタスクでエラーが報告されます。

  • ソースから MaxCompute 外部テーブルへのデータ同期はサポートされていません。

  • 宛先テーブルの列がソース列にマッピングされていない場合、Data Integration は、テーブル作成時にデフォルト値が指定されていても、同期後にその値を null に設定します。

  • MaxCompute Writer は、インポート前 SQL 文 (preSql) やインポート後 SQL 文 (postSql) をサポートしません。データの書き込み前後に宛先テーブルで SQL 操作を実行する必要がある場合 (たとえば、増分書き込みのために部分的なデータを削除する DELETE 文を実行するなど)、データ同期タスクの上流または下流に SQL ノードを設定して、必要な前処理または後処理操作を処理します。

リアルタイム書き込み

  • リアルタイム同期タスクは、サーバーレスリソースグループをサポートします。

  • リアルタイム同期タスクは、プライマリキーのないテーブルの同期をサポートしません。

  • ソースから MaxCompute 外部テーブルへのデータ同期はサポートされていません。

  • デフォルトの MaxCompute データソース (通常は odps_first) にリアルタイム同期を実行する場合、デフォルトで一時的な AccessKey ペアが使用されます。一時的な AccessKey ペアは 7 日後に有効期限が切れるため、タスクが失敗します。プラットフォームは、一時的な AccessKey ペアの有効期限切れが原因で失敗したことを検出すると、タスクを自動的に再起動します。このタイプのアラートに対してモニタリングルールを設定している場合は、アラート通知が届きます。

  • MaxCompute へのワンクリックリアルタイム同期タスクでは、設定した当日にクエリできるのは履歴の完全データのみです。増分データは、翌日にマージが完了した後にのみ MaxCompute でクエリできます。

  • MaxCompute へのワンクリックリアルタイム同期タスクは、毎日完全パーティションを生成します。過剰なストレージ使用量を防ぐため、これらのタスクによって自動的に作成される MaxCompute テーブルのデフォルトのライフサイクルは 30 日です。これがビジネス要件を満たさない場合は、同期タスクの設定時に対応する MaxCompute テーブル名をクリックしてライフサイクルを変更できます。

  • Data Integration は、MaxCompute エンジンの同期データチャネルを使用してデータをアップロードおよびダウンロードします。同期データチャネルの SLA の詳細については、「MaxCompute Tunnel の概要」をご参照ください。MaxCompute エンジンの同期データチャネルの SLA に基づいて、データ同期技術の選択を評価してください。

  • インスタンスモードで MaxCompute へのワンクリックリアルタイム同期を行う場合、Data Integration 専用リソースグループには最低 8C16G の仕様が必要です。

  • 現在のワークスペースと同じリージョンにあるカスタム MaxCompute データソースのみがサポートされます。リージョン間の MaxCompute プロジェクトは接続性テストに合格する可能性がありますが、タスク実行中に MaxCompute でのテーブル作成フェーズでエンジンが存在しないことを示すエラーが報告されます。

  • データベース全体の同期の宛先として MaxCompute を使用する場合、テーブルタイプが通常のテーブルであれば、MaxCompute へのワンクリックリアルタイム同期と、データベース全体のリアルタイム同期の増分ストリーミングモードのみがサポートされます。テーブルタイプが Delta Table の場合、データベース全体のリアルタイム同期とMaxCompute へのワンクリックリアルタイム同期の両方がサポートされます。

    説明

    カスタム MaxCompute データソースを使用する場合でも、DataWorks プロジェクトは MaxCompute エンジンに関連付けられている必要があります。そうしないと、MaxCompute SQL ノードを作成できず、完全同期のための done-flag ノードの作成が失敗します。

サポートされる列の型

MaxCompute 1.0 データ型、2.0 データ型、および Hive 互換データ型がサポートされています。以下のセクションでは、各データ型エディションでサポートされる列の型について説明します。

1.0 データ型でサポートされる列

列の型

バッチ読み取り

バッチ書き込み

リアルタイム書き込み

BIGINT

サポート

サポート

サポート

DOUBLE

サポート

サポート

サポート

DECIMAL

サポート

サポート

サポート

STRING

サポート

サポート

サポート

DATETIME

サポート

サポート

サポート

BOOLEAN

サポート

サポート

サポート

ARRAY

サポート

サポート

サポート

MAP

サポート

サポート

サポート

STRUCT

サポート

サポート

サポート

2.0 データ型および Hive 互換データ型でサポートされる列

列の型

バッチ読み取り (MaxCompute Reader)

バッチ書き込み (MaxCompute Writer)

リアルタイム書き込み

TINYINT

サポート

サポート

サポート

SMALLINT

サポート

サポート

サポート

INT

サポート

サポート

サポート

BIGINT

サポート

サポート

サポート

BINARY

サポート

サポート

サポート

FLOAT

サポート

サポート

サポート

DOUBLE

サポート

サポート

サポート

DECIMAL(pecision,scale)

サポート

サポート

サポート

VARCHAR(n)

サポート

サポート

サポート

CHAR(n)

非サポート

サポート

サポート

STRING

サポート

サポート

サポート

DATE

サポート

サポート

サポート

DATETIME

サポート

サポート

サポート

TIMESTAMP

サポート

サポート

サポート

BOOLEAN

サポート

サポート

サポート

ARRAY

サポート

サポート

サポート

MAP

サポート

サポート

サポート

STRUCT

サポート

サポート

サポート

データ型の変換

次の表に、MaxCompute Reader がサポートするデータ型の変換を示します。

型のカテゴリ

Data Integration の型

データベースのデータ型

整数

LONG

BIGINT、INT、TINYINT、および SMALLINT

ブール値

BOOLEAN

BOOLEAN

日付と時刻

DATE

DATETIME、TIMESTAMP、および DATE

浮動小数点

DOUBLE

FLOAT、DOUBLE、および DECIMAL

バイナリ

BYTES

BINARY

複合

STRING

ARRAY、MAP、および STRUCT

重要

データ変換が失敗した場合、またはデータが宛先データソースに書き込まれなかった場合、そのデータはダーティデータとして扱われます。これはダーティデータのしきい値と組み合わせて使用できます。

データ同期前の準備

MaxCompute テーブルからデータを読み書きする前に、必要に応じて関連するプロパティを有効にすることができます。

MaxCompute への接続とプロジェクトレベル設定の有効化

  • MaxCompute クライアントにログインします。詳細については、「MaxCompute クライアント」をご参照ください。

  • MaxCompute プロジェクトレベル設定の有効化:必要な権限があることを確認してください。Project Owner アカウントを使用して関連操作を実行できます。MaxCompute の権限の詳細については、「MaxCompute の権限」をご参照ください。

ACID プロパティの有効化

Project Owner アカウントを使用して、クライアントで次のコマンドを実行し、ACID プロパティを有効にすることができます。MaxCompute の ACID セマンティクスの詳細については、「ACID セマンティクス」をご参照ください。

setproject odps.sql.acid.table.enable=true;

(オプション) 2.0 データ型の有効化

MaxCompute 2.0 データ型の TIMESTAMP 型を使用する必要がある場合は、Project Owner アカウントを使用してクライアントで次のコマンドを実行し、2.0 データ型を有効にすることができます。

setproject odps.sql.type.system.odps2=true;

(オプション) アカウントへのアクセス権の付与

MaxCompute 計算リソースをワークスペースに関連付けると、デフォルトで DataWorks に MaxCompute データソースが作成されます。このデータソースを使用して、現在のワークスペースでデータ同期を行うことができます。別のワークスペースでこの MaxCompute データソースからデータを同期する場合は、別のワークスペースのデータソースに指定されたアクセスアカウントが MaxCompute プロジェクトにアクセスするために必要な権限を持っていることを確認してください。クロスアカウント認証については、「クロスアカウント認証」をご参照ください。

MaxCompute データソースの作成

データ同期タスクを開発する前に、DataWorks で MaxCompute プロジェクトを MaxCompute データソースとして作成する必要があります。詳細については、「MaxCompute データソースの作成」をご参照ください。

説明

  • 標準モードのワークスペースは、データソースの分離をサポートします。開発環境と本番環境のデータソースを個別に追加して分離し、データを保護することができます。詳細については、「データソースの分離の設定」をご参照ください。

  • ワークスペース内の odps_first という名前の MaxCompute データソースがデータソースページで手動で作成されなかった場合、それはデータソースのアップグレード前にワークスペースに関連付けられた最初の MaxCompute エンジン用に自動的に作成されたデータソースです。このデータソースを使用してデータ同期を実行すると、対応する MaxCompute エンジンプロジェクトからデータが読み書きされます。

    データソース設定ページでデータソースが使用する MaxCompute プロジェクト名を表示して、最終的にどの MaxCompute プロジェクトからデータが読み書きされるかを確認できます。詳細については、「データソースの詳細の表示」をご参照ください。

データ同期タスクの開発

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

単一テーブルのバッチ同期タスクの設定

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

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

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

手順については、「バッチモードでのデータベース全体のデータ同期」、「リアルタイムモードでのデータベース全体のデータ同期」、および「MaxCompute へのワンクリックリアルタイム同期」をご参照ください。

よくある質問

Data Integration に関するその他のよくある質問については、「Data Integration に関するよくある質問」をご参照ください。

付録:スクリプトのデモとパラメーターの説明

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

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

Reader スクリプトのデモ

重要

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

{
    "type":"job",
    "version":"2.0",
    "steps":[
        {
            "stepType":"odps",//プラグイン名。
            "parameter":{
                "partition":[],//データが読み取られるパーティション。
                "isCompress":false,//データを圧縮するかどうかを指定します。
                "datasource":"",//データソース。
                "column":[//ソーステーブルの列情報。
                    "id"
                ],
                "where": "",//WHERE を使用したデータフィルタリングが有効な場合の具体的な WHERE 句の内容。
                "enableWhere":false,//WHERE を使用したデータフィルタリングを有効にするかどうかを指定します。
                "table":""//テーブル名。
            },
            "name":"Reader",
            "category":"reader"
        },
        { 
            "stepType":"stream",
            "parameter":{
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"//エラーカウント。
        },
        "speed":{
            "throttle":true,//throttle が false に設定されている場合、mbps パラメーターは効果がなく、速度制限は無効になります。throttle が true に設定されている場合、速度制限は有効になります。
            "concurrent":1, //同時実行数。
            "mbps":"12"//速度制限レート。1 mbps = 1 MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

MaxCompute の トンネルエンドポイントを指定したい場合は、スクリプトモードでデータソースを手動で設定できます。上記の例の "datasource":"", をデータソースの具体的なパラメーターに置き換えます。例:

"accessId":"*******************",
"accessKey":"*******************",
"endpoint":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api",
"odpsServer":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api", 
"tunnelServer":"http://dt.eu-central-1.maxcompute.aliyun.com", 
"project":"*****", 

Reader スクリプトのパラメーター

パラメーター

説明

必須

デフォルト値

datasource

データソースの名前。スクリプトモードではデータソースを追加できます。このパラメーターの値は、追加したデータソースの名前と同じでなければなりません。

はい

なし

table

データが読み取られるテーブルの名前。名前は大文字と小文字を区別しません。

はい

なし

partition

読み取るデータのパーティション情報。

  • ODPS パーティション設定は、Linux シェルのワイルドカードをサポートします。* は 0 個以上の文字を表し、? は任意の 1 文字を表します。

  • デフォルトでは、読み取るパーティションは存在している必要があります。パーティションが存在しない場合、タスクはエラーを報告します。パーティションが存在しない場合でもタスクを成功させたい場合は、スクリプトモードに切り替えて、ODPS パラメーターに "successOnNoPartition": true 設定を追加します。

たとえば、test というパーティションテーブルに、pt=1,ds=hangzhou、pt=1,ds=shanghai、pt=2,ds=hangzhou、pt=2,ds=beijing の 4 つのパーティションが含まれているとします。異なるパーティションからデータを読み取るために、次の設定を行うことができます:

  • pt=1,ds=hangzhou パーティションからデータを読み取るには、パーティション情報を "partition":"pt=1,ds=hangzhou" に設定します。

  • pt=1 の下のすべてのパーティションからデータを読み取るには、パーティション情報を "partition":"pt=1,ds=*" に設定します。

  • test テーブルのすべてのパーティションからデータを読み取るには、パーティション情報を "partition":"pt=*,ds=*" に設定します。

さらに、必要に応じてパーティションデータを取得するための条件を設定できます:

  • 最大パーティションを指定するには、/*query*/ ds=(select MAX(ds) from DataXODPSReaderPPR) 設定を追加します。

  • 条件でフィルタリングするには、対応する条件 /*query*/ pt+expression を追加します。たとえば、/*query*/ pt>=20170101 and pt<20170110 は、20170101 以降かつ 20170110 より前の pt パーティションからすべてのデータを取得します。

説明

/*query*/ は、それに続く内容が WHERE 条件として識別されることを示します。

テーブルがパーティションテーブルの場合は必須です。非パーティション化テーブルの場合は指定しないでください。

なし

column

MaxCompute ソーステーブルの列情報。たとえば、テーブル test に id、name、age 列がある場合:

  • id、name、age 列を順番に読み取るには、"column":["id","name","age"] または "column":["*"] を設定します。

    説明

    抽出列を (*) に設定することはお勧めしません。テーブルの各列を順番に読み取るため、テーブルの列の順序、データ型、または列数が変更された場合、ソーステーブルの列と宛先テーブルの列が一致しなくなるリスクがあります。これにより、タスクが誤った結果を返したり、失敗したりする可能性があります。

  • name と id 列を順番に読み取るには、"column":["name","id"] を設定します。

  • 抽出されたソース列に定数フィールドを追加する (宛先テーブルの列の順序に合わせるため) 場合、たとえば、抽出された各行に age 列の値、name 列の値、定数の日付値 1988-08-08 08:08:08、および id 列の値を含めたい場合は、"column":["age","name","'1988-08-08 08:08:08'","id"] を設定します。定数列の値は単一引用符 (') で囲みます。

    内部的には、設定された各列が両端で ' で囲まれているかどうかをチェックすることで定数が識別されます。もしそうであれば、それは定数フィールドとして扱われ、その実際の値は ' マークを削除した後の内容になります。

    説明
    • データフィルタリングモード (enableWhere=true かつ where が空でない) を使用する場合、column で MaxCompute 関数がサポートされます。非データフィルタリングモードを使用する場合、MaxCompute 関数はサポートされません。

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

はい

なし

enableWhere

データフィルタリングに WHERE 句を使用するかどうかを指定します。

いいえ

false

where

WHERE を使用したデータフィルタリングが有効な場合の具体的な WHERE 句の内容。

いいえ

なし

Writer スクリプトのデモ

以下はスクリプト設定の例です。

{
    "type":"job",
    "version":"2.0",//バージョン番号。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"odps",//プラグイン名。
            "parameter":{
                "partition":"",//パーティション情報。
                "truncate":true,//クリーンアップルール。
                "isCompress":false,//データを圧縮するかどうかを指定します。
                "datasource":"odps_first",//データソース名。
            "column": [//ソース列名。
                "id",
                "name",
                "age",
                "sex",
                "salary",
                "interest"
                ],
                "table":""//テーブル名。
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"//エラーカウント。許容されるダーティデータレコードの最大数を指定します。
        },
        "speed":{
            "throttle":true,//throttle が false に設定されている場合、mbps パラメーターは効果がなく、速度制限は無効になります。throttle が true に設定されている場合、速度制限は有効になります。
            "concurrent":1, //同時実行数。
            "mbps":"12"//速度制限レート。1 mbps = 1 MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

MaxCompute の トンネルエンドポイントを指定したい場合は、スクリプトモードでデータソースを手動で設定できます。上記の例の "datasource":"", をデータソースの具体的なパラメーターに置き換えます。例:

"accessId":"<yourAccessKeyId>",
 "accessKey":"<yourAccessKeySecret>",
 "endpoint":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api",
 "odpsServer":"http://service.eu-central-1.maxcompute.aliyun-inc.com/api", 
"tunnelServer":"http://dt.eu-central-1.maxcompute.aliyun.com", 
"project":"**********", 

Writer スクリプトのパラメーター

パラメーター

説明

必須

デフォルト値

datasource

データソースの名前。スクリプトモードではデータソースを追加できます。このパラメーターの値は、追加したデータソースの名前と同じでなければなりません。

はい

なし

table

データが書き込まれるテーブルの名前。名前は大文字と小文字を区別しません。複数のテーブルを指定することはできません。

はい

なし

partition

データが書き込まれるテーブルのパーティション情報。最後のレベルまでパーティションを指定する必要があります。たとえば、3 つのレベルのパーティションを持つテーブルにデータを書き込むには、pt=20150101, type=1, biz=2 のように最後のレベルのパーティションを指定する必要があります:

  • 非パーティション化テーブルの場合、このパラメーターは指定しないでください。これは、データが直接宛先テーブルにインポートされることを意味します。

  • MaxCompute Writer は、書き込みのためのデータルーティングをサポートしていません。パーティションテーブルの場合、データが最後のレベルのパーティションに書き込まれることを確認してください。

テーブルがパーティションテーブルの場合は必須です。非パーティション化テーブルの場合は指定しないでください。

なし

column

インポートする列のリスト。すべての列をインポートするには、"column": ["*"] を設定します。特定の MaxCompute 列にデータを挿入するには、列を指定します。たとえば、"column": ["id","name"] のように設定します:

  • MaxCompute Writer は、列のフィルタリングと列の並べ替えをサポートします。たとえば、テーブルに a、b、c の 3 つの列があり、c と b の列のみを同期したい場合は、"column": ["c","b"] を設定します。インポート中に、列 a は自動的に null に設定されます。

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

はい

なし

truncate

"truncate": "true" を設定することで、書き込みのべき等性を確保できます。書き込みに失敗してタスクが再実行されると、MaxCompute Writer は以前に書き込まれたデータをクリアし、新しいデータをインポートします。これにより、再実行後のデータ整合性が保証されます。

データクリーンアップには MaxCompute SQL が使用されるため、SQL は原子性を保証できません。したがって、truncate オプションはアトミック操作ではありません。複数のタスクが同じ Table または Partition のパーティションを同時にクリーンアップする場合、同時実行の順序付けの問題が発生する可能性があります。

この問題を回避するため、複数のジョブが同じパーティションに対して同時に DDL 操作を実行しないようにするか、複数の同時ジョブを開始する前にパーティションを作成することをお勧めします。

はい

なし

emptyAsNull

書き込み前に空文字列を NULL に変換するかどうかを指定します。

いいえ

false

consistencyCommit

同期後の可視性。

  • はい (true) に設定した場合:タスクが正常に同期された後にのみ、データが一度に表示されるようになります。ただし、データ量が 1 TB を超えると、MaxCompute が同期できるブロックの最大数が 300,000 であるため、同期タスクは失敗します。

  • いいえ (false) に設定した場合:同期タスクが完了する前に、すでに MaxCompute に同期されている一部のデータをクエリできます。ただし、具体的に表示される部分は予測できません。このテーブルの下流のコンシューマーは、データの完全性に注意する必要があります。

いいえ

false