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

DataWorks:MaxCompute

最終更新日:Apr 21, 2026

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

機能

説明

DataWorks の MaxCompute データソースは、トンネルエンドポイントを使用して MaxCompute プロジェクトのトンネルサービスにアクセスします。これにより、プロジェクトへのデータのアップロードまたはダウンロードによってデータを同期できます。

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=${scheduling parameter} および ds=hangzhou として指定する必要があります。その後、id 列と name 列のフィールドマッピングを設定できます。

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

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

バッチ書き込み

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

  • 送信先テーブルが DeltaTable の場合は、Advanced Configuration を展開し、Visible After SynchronizationYes に設定します。そうしないと、同時実行数が 1 より大きい場合にタスクがエラーを報告します。

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

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

リアルタイム書き込み

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

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

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

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

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

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

  • Data Integration は、データのアップロードとダウンロードに MaxCompute エンジンのデータ同期チャネルを使用します。これらのチャネルのサービスレベルアグリーメント (SLA) については、「データ転送サービス (アップロード) のシナリオとツール」をご参照ください。これらのチャネルの SLA に基づいて、データ同期メソッドを評価してください。

  • インスタンスモードで MaxCompute へのワンクリックリアルタイム同期を使用する場合、Data Integration 専用リソースグループには少なくとも 8 vCPU と 16 GiB のメモリが必要です。

  • Data Integration は、現在のワークスペースと同じリージョンにあるユーザー作成の MaxCompute データソースのみをサポートします。異なるリージョンのデータソースの接続テストが成功しても、テーブル作成中に同期タスクが失敗し、「engine does not exist」エラーが報告されます。

  • MaxCompute がデータベース全体の同期の送信先である場合、通常のテーブルに対してはデータベース全体の完全および増分タスクとリアルタイム増分ストリームモードのみをサポートします。送信先テーブルが DeltaTable の場合、リアルタイム同期とデータベース全体の完全および増分タスクの両方がサポートされます。

    説明

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

サポートされるデータ型

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

MaxCompute 1.0 データ型

バッチ読み取り

バッチ書き込み

リアルタイム書き込み

BIGINT

サポート対象

サポート対象

サポート対象

DOUBLE

サポート対象

サポート対象

サポート対象

DECIMAL

サポート対象

サポート対象

サポート対象

STRING

サポート対象

サポート対象

サポート対象

DATETIME

サポート対象

サポート対象

サポート対象

BOOLEAN

サポート対象

サポート対象

サポート対象

ARRAY

サポート対象

サポート対象

サポート対象

MAP

サポート対象

サポート対象

サポート対象

STRUCT

サポート対象

サポート対象

サポート対象

MaxCompute 2.0 および Hive 互換データ型

バッチ読み取り (MaxCompute Reader)

バッチ書き込み (MaxCompute Writer)

リアルタイム書き込み

TINYINT

サポート対象

サポート対象

サポート対象

SMALLINT

サポート対象

サポート対象

サポート対象

INT

サポート対象

サポート対象

サポート対象

BIGINT

サポート対象

サポート対象

サポート対象

BINARY

サポート対象

サポート対象

サポート対象

FLOAT

サポート対象

サポート対象

サポート対象

DOUBLE

サポート対象

サポート対象

サポート対象

DECIMAL(precision,scale)

サポート対象

サポート対象

サポート対象

VARCHAR(n)

サポート対象

サポート対象

サポート対象

CHAR(n)

サポート対象外

サポート対象

サポート対象

STRING

サポート対象

サポート対象

サポート対象

DATE

サポート対象

サポート対象

サポート対象

DATETIME

サポート対象

サポート対象

サポート対象

TIMESTAMP

サポート対象

サポート対象

サポート対象

BOOLEAN

サポート対象

サポート対象

サポート対象

ARRAY

サポート対象

サポート対象

サポート対象

MAP

サポート対象

サポート対象

サポート対象

STRUCT

サポート対象

サポート対象

サポート対象

データ型変換

次の表に、MaxCompute Reader のデータ型変換ルールを示します。

カテゴリ

Data Integration の型

MaxCompute データ型

整数

LONG

BIGINT、INT、TINYINT、SMALLINT

ブール値

BOOLEAN

BOOLEAN

日付と時刻

DATE

DATETIME、TIMESTAMP、DATE

浮動小数点

DOUBLE

FLOAT、DOUBLE、DECIMAL

バイナリ

BYTES

BINARY

複合

STRING

ARRAY、MAP、STRUCT

重要

データ型の変換または送信先データソースへのデータの書き込みが失敗した場合、そのデータはダーティデータとして扱われます。ダーティデータの許容しきい値を使用して、システムがこれらのレコードをどのように処理するかを制御できます。

前提条件

MaxCompute テーブルからの読み取りまたは書き込みを行う際に、必要に応じて特定のプロパティを有効にできます。

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

  • MaxCompute クライアントにログインします。詳細については、「ローカルクライアント (odpscmd) を使用した接続」をご参照ください。

  • MaxCompute で必要なプロジェクトレベルの設定を有効にします。これらの操作には、プロジェクトオーナーの権限が必要です。MaxCompute の権限の詳細については、「ロール計画」をご参照ください。

ACID セマンティクスの有効化

ACID セマンティクスを有効にするには、プロジェクトオーナーとしてクライアントで次のコマンドを実行します。MaxCompute の ACID セマンティクスの詳細については、「ACID セマンティクス」をご参照ください。

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

(オプション) V2.0 データ型の有効化

TIMESTAMP データ型を使用するには、プロジェクトオーナーとしてクライアントで次のコマンドを実行して、MaxCompute V2.0 データ型を有効にします。

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

(オプション) アカウントの権限付与

MaxCompute コンピュートエンジンをワークスペースにバインドすると、DataWorks に MaxCompute データソースが自動的に作成されます。このデータソースを使用して、現在のワークスペース内でデータ同期を行うことができます。別のワークスペースでこの MaxCompute データソースからデータを同期するには、別のワークスペースのデータソースのアクセスアカウントが、この MaxCompute コンピュートエンジンにアクセスするために必要な権限を持っていることを確認してください。クロスアカウント認証の詳細については、「クロスアカウント認証 (MaxCompute および Hologres)」をご参照ください。

MaxCompute データソースの作成

データ同期タスクを開発する前に、ご利用の MaxCompute プロジェクトを DataWorks の MaxCompute データソースとして追加する必要があります。詳細な手順については、「MaxCompute コンピュートリソースのバインド」をご参照ください。

説明
  • 標準モードのワークスペースは、データソースの分離をサポートしています。開発環境と本番環境でデータソースを追加して分離することで、データセキュリティを強化できます。詳細については、「開発環境と本番環境でのデータソースの分離」をご参照ください。

  • odps_first データソースは、手動で作成せずにワークスペースに表示される場合、デフォルトのデータソースです。これは、データソース機能がアップグレードされる前に、ワークスペースに最初にバインドされた 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 句。
                "enableWhere":false,// データフィルタリングに WHERE 句を使用するかどうかを指定します。
                "table":""// テーブル名。
            },
            "name":"Reader",
            "category":"reader"
        },
        { 
            "stepType":"stream",
            "parameter":{
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// エラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効にするかどうかを指定します。このパラメーターが true に設定されている場合、mbps パラメーターが有効になります。
            "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

データを読み取るパーティション。

  • Linux シェルのワイルドカードを使用してパーティションを指定できます。アスタリスク (*) は 0 個以上の文字に一致し、疑問符 (?) は 1 つの文字に一致します。

  • デフォルトでは、指定されたパーティションが存在しない場合、ジョブは失敗します。パーティションがなくてもジョブを成功させるには、スクリプトモードの ODPS パラメーターセクションに "successOnNoPartition": true を追加します。

たとえば、test という名前のパーティションテーブルに pt=1,ds=hangzhoupt=1,ds=shanghaipt=2,ds=hangzhoupt=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 は、pt の値が 2017 年 1 月 1 日 (含む) から 2017 年 1 月 10 日 (含まない) までのパーティションからすべてのデータを選択します。

説明

/*query*/ の後の内容は WHERE 句として扱われます。

パーティションテーブルの場合のみ必須。

なし

column

MaxCompute ソーステーブルから読み取る列。たとえば、test という名前のテーブルに idnameage 列が含まれている場合:

  • idnameage 列を順番に読み取るには、このパラメーターを "column":["id","name","age"] または "column":["*"] に設定します。

    説明

    * を使用してすべての列を指定することは推奨しません。* を使用すると、システムはすべての列をデフォルトの順序で読み取ります。ソーステーブルの列の順序、型、または数が変更されると、送信先テーブルとのデータ不一致が発生し、誤った結果やジョブの失敗につながる可能性があります。

  • nameid 列を順番に読み取るには、このパラメーターを "column":["name","id"] に設定します。

  • 送信先テーブルの列構造に合わせて定数列を追加できます。たとえば、age 列、name 列、定数日付 1988-08-08 08:08:08、および id 列を読み取るには、このパラメーターを "column":["age","name","'1988-08-08 08:08:08'","id"] に設定します。定数値は単一引用符 (') で囲みます。

    システムは、フィールドが単一引用符 (') で始まり、終わる場合、それを定数列として識別します。システムは、囲んでいる ' 文字を削除して、中の値を使用します。

    説明
    • column パラメーターで MaxCompute 関数を使用できるのは、データフィルタリングが有効になっている場合 (enableWheretrue で、where が空でない場合) のみです。

    • 同期する列を指定する必要があります。このパラメーターは空にできません。

はい

なし

enableWhere

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

いいえ

false

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,// 速度制限を有効にするかどうかを指定します。このパラメーターが true に設定されている場合、mbps パラメーターが有効になります。
            "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

送信先テーブルの名前。名前は大文字と小文字を区別しません。指定できるテーブルは 1 つだけです。

はい

なし

partition

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

  • 非パーティションテーブルの場合、このパラメーターは設定しないでください。データは直接テーブルに書き込まれます。

  • MaxCompute Writer はデータを異なるパーティションにルーティングできないため、単一の最下位レベルのパーティションに書き込む必要があります。

パーティションテーブルの場合のみ必須。

なし

column

データの送信先列を指定します。すべての列にデータを書き込むには、このパラメーターを "column": ["*"] に設定します。列のサブセットにデータを書き込むには、"column": ["id","name"] のように名前を指定します:

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

  • 同期する列を指定する必要があります。このパラメーターは空にできません。

はい

なし

truncate

"truncate": "true" を設定すると、書き込み操作がべき等になります。ジョブが失敗して再実行された場合、MaxCompute Writer はまず前回の実行データをクリーンアップし、次に新しいデータを書き込みます。これにより、再実行間のデータ整合性が保証されます。

MaxCompute Writer はデータクリーンアップに MaxCompute SQL を使用します。これはアトミック操作ではないため、truncate オプションはアトミックではありません。その結果、同じ table または partition で同時にクリーンアップジョブを実行すると、タイミングの問題が発生する可能性があります。

このような問題を避けるために、複数のジョブから同じパーティションに対して同時に DDL 操作を実行しないでください。または、同時ジョブを開始する前にパーティションを作成することもできます。

はい

なし

emptyAsNull

書き込む前に空の文字列を null 値に変換するかどうかを指定します。

いいえ

false

consistencyCommit

データの可視性を制御します。

  • true:データは同期ジョブが正常に完了した後にのみ可視になります。ただし、データ量が 1 TB を超えるとジョブは失敗します。これは、MaxCompute が同期ごとに 300,000 ブロックの制限があるためです。

  • false:MaxCompute に書き込まれているデータは、ジョブが完了する前にクエリできます。これは、このテーブルを使用する下流のアプリケーションが同期プロセス中に不完全なデータを読み取る可能性があることを意味します。

いいえ

false