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

DataWorks:Tablestore データソース

最終更新日:Jun 22, 2026

Tablestore は、Alibaba Cloud の Pangu ストレージ上に構築された NoSQL データストレージサービスです。Tablestore データソースを使用すると、Tablestore からのデータの読み取りと書き込みができます。このトピックでは、DataWorks の Tablestore データ同期のサポートについて説明します。

制限事項

  • Tablestore Reader および Writer プラグインは、Tablestore からのデータの読み取りと書き込みを行い、ワイドテーブルと時系列テーブルのデータを 行モード列モード の 2 つのモードで転送します。

    • 列モード:Tablestore の多バージョンモデルでは、データは > Column > Version の 3 階層構造になっています。1 つの行は任意の数の列を持つことができ、列名は固定されていません。各列は複数のバージョンを持つことができ、それぞれに特定のタイムスタンプ (バージョン番号) があります。このモードでは、データは (プライマリキー値、列名、タイムスタンプ、列値) の 4 タプルとしてエクスポートされます。このモードでインポートされるデータも、同じ 4 タプル形式である必要があります。

    • 行モード:このモードでは、更新された各レコードが (プライマリキー値、属性列値) の形式で行としてエクスポートされます。

  • Tablestore テーブルは、プライマリキー列 (primaryKey) と属性列 (column) で構成されます。ソースの列の順序は、送信先テーブルのスキーマと一致する必要があり、プライマリキー列が属性列の前に来ます。不一致があると、列マッピングエラーが発生します。

  • Tablestore Reader は、ソースデータの範囲を N 個のタスクに分割します。N はデータ同期に設定された同時実行数です。専用の Tablestore Reader スレッドが各タスクを処理します。

サポートされるフィールドタイプ

Tablestore Reader と Tablestore Writer は、すべての Tablestore データ型をサポートします。

タイプカテゴリ

Tablestore タイプ

integer

INTEGER

floating-point

DOUBLE

string

STRING

boolean

BOOLEAN

binary

BINARY

説明
  • Tablestore は、日付または時刻のデータ型をネイティブにサポートしていません。アプリケーションは通常、Long 型を使用して時刻を UNIX タイムスタンプとして保存します。

  • スクリプトモードでは、INTEGER 型のデータを INT として設定する必要があります。DataWorks は自動的にそれを INTEGER に変換します。型を直接 INTEGER として設定すると、エラーがログに記録され、タスクは失敗します。

データソースの追加

DataWorks で同期タスクを開発する前に、「データソース管理」の指示に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際、DataWorks コンソールでパラメーターの説明を表示して、各パラメーターの意味を理解できます

同期タスクの開発

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

単一テーブルのオフライン同期タスク

付録 I:Reader スクリプト例とパラメーター

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

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

Reader スクリプト例

行モードのワイドテーブル

",// データソース。
                "newVersion":"true",// 新しい Tablestore リーダーを使用します。
                "mode": "normal",// 行モードでデータを読み取ります。
                "isTimeseriesTable":"false",// テーブルが時系列テーブルではなく、ワイドテーブルであることを指定します。
                "column":[// カラム。
                    {
                        "name":"column1"// カラム名。
                    },
                    {
                        "name":"column2"
                    },
                    {
                        "name":"column3"
                    },
                    {
                        "name":"column4"
                    },
                    {
                        "name":"column5"
                    }
                ],
                "range":{
                    "split":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint1"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint2"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint3"
                        },
                        {
                            "type":"STRING",
                            "value":"endValue"
                        }
                    ],
                    "end":[
                        {
                            "type":"STRING",
                            "value":"endValue"
                        },
                        {
                            "type":"INT",
                            "value":"100"
                        },
                        {
                            "type":"INF_MAX"
                        },
                        {
                            "type":"INF_MAX"
                        }
                    ],
                    "begin":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"INT",
                            "value":"0"
                        },
                        {
                            "type":"INF_MIN"
                        },
                        {
                            "type":"INF_MIN"
                        }
                    ]
                },
                "table":""// テーブル名。
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコードの最大数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定した場合、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限レート (単位: Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"<your_data_source_name>",// データソース。
                "newVersion":"true",// 新しい Tablestore Reader を使用します。
                "mode": "normal",// 行モードでデータを読み取ります。
                "isTimeseriesTable":"false",// テーブルが時系列テーブルではなく、ワイドテーブルであることを指定します。
                "column":[// 列。
                    {
                        "name":"column1"// 列名。
                    },
                    {
                        "name":"column2"
                    },
                    {
                        "name":"column3"
                    },
                    {
                        "name":"column4"
                    },
                    {
                        "name":"column5"
                    }
                ],
                "range":{
                    "split":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint1"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint2"
                        },
                        {
                            "type":"STRING",
                            "value":"splitPoint3"
                        },
                        {
                            "type":"STRING",
                            "value":"endValue"
                        }
                    ],
                    "end":[
                        {
                            "type":"STRING",
                            "value":"endValue"
                        },
                        {
                            "type":"INT",
                            "value":"100"
                        },
                        {
                            "type":"INF_MAX"
                        },
                        {
                            "type":"INF_MAX"
                        }
                    ],
                    "begin":[
                        {
                            "type":"STRING",
                            "value":"beginValue"
                        },
                        {
                            "type":"INT",
                            "value":"0"
                        },
                        {
                            "type":"INF_MIN"
                        },
                        {
                            "type":"INF_MIN"
                        }
                    ]
                },
                "table":"<your_table_name>"// テーブル名。
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容される最大エラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定すると、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート (Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}</your_table_name></your_data_source_name>

行モードの時系列テーブル

",// データソース。
                "table": "",// テーブル名。
                // 時系列データを読み取るには、mode パラメーターを normal に設定する必要があります。
                "mode": "normal",
                // 時系列データを読み取るには、newVersion パラメーターを true に設定する必要があります。
                "newVersion": "true",
                // 時系列テーブルを指定します。
                "isTimeseriesTable":"true",
                // 読み取る時系列のメジャー名。任意。省略した場合は、すべてのデータが読み取られます。
                "measurementName":"measurement_1",
                "column": [
                  {
                    "name": "_m_name"
                  },
                  {
                    "name": "tagA",
                    "is_timeseries_tag":"true"
                  },
                  {
                    "name": "double_0",
                    "type":"DOUBLE"
                  },
                  {
                    "name": "string_0",
                    "type":"STRING"
                  },
                  {
                    "name": "long_0",
                    "type":"INT"
                  },
                  {
                    "name": "binary_0",
                    "type":"BINARY"
                  },
                  {
                    "name": "bool_0",
                    "type":"BOOL"
                  },
                  {
                    "type":"STRING",
                    "value":"testString"
                  }
                ]
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコードの最大数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定した場合、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート (単位: Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"<your_data_source_name>",// データソース。
                "table": "<your_table_name>",// テーブル名。
                // 時系列データを読み取るには、mode パラメーターを normal に設定する必要があります。
                "mode": "normal",
                // 時系列データを読み取るには、newVersion パラメーターを true に設定する必要があります。
                "newVersion": "true",
                // 時系列テーブルを指定します。
                "isTimeseriesTable":"true",
                // 読み取る時系列のメジャー名。オプション。省略した場合、すべてのデータが読み取られます。
                "measurementName":"measurement_1",
                "column": [
                  {
                    "name": "_m_name"
                  },
                  {
                    "name": "tagA",
                    "is_timeseries_tag":"true"
                  },
                  {
                    "name": "double_0",
                    "type":"DOUBLE"
                  },
                  {
                    "name": "string_0",
                    "type":"STRING"
                  },
                  {
                    "name": "long_0",
                    "type":"INT"
                  },
                  {
                    "name": "binary_0",
                    "type":"BINARY"
                  },
                  {
                    "name": "bool_0",
                    "type":"BOOL"
                  },
                  {
                    "type":"STRING",
                    "value":"testString"
                  }
                ]
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容される最大エラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定すると、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート (Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}</your_table_name></your_data_source_name>

列モードのワイドテーブル

",// データソース。
                "table":"",// テーブル名。
                "newVersion":"true",// 新しい Tablestore リーダーを使用します。
                "mode": "multiversion",// マルチバージョンモード。
                "column":[// エクスポートする属性カラム。プライマリキーカラムはサポートされていません。
                    {"name":"mobile"},
                    {"name":"name"},
                    {"name":"age"},
                    {"name":"salary"},
                    {"name":"marry"}
                ],
                "range":{// エクスポートする範囲。
                    "begin":[
                        {"type":"INF_MIN"},
                        {"type":"INF_MAX"}
                    ],
                    "end":[
                        {"type":"INF_MAX"},
                        {"type":"INF_MIN"}
                    ],
                    "split":[
                    ]
                },

            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコードの最大数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定した場合、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限レート (単位: Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"<your_data_source_name>",// データソース。
                "table":"<your_table_name>",// テーブル名。
                "newVersion":"true",// 新しい Tablestore Reader を使用します。
                "mode": "multiversion",// 多バージョンモード。
                "column":[// エクスポートする属性列。プライマリキー列はサポートされていません。
                    {"name":"mobile"},
                    {"name":"name"},
                    {"name":"age"},
                    {"name":"salary"},
                    {"name":"marry"}
                ],
                "range":{// エクスポートする範囲。
                    "begin":[
                        {"type":"INF_MIN"},
                        {"type":"INF_MAX"}
                    ],
                    "end":[
                        {"type":"INF_MAX"},
                        {"type":"INF_MIN"}
                    ],
                    "split":[
                    ]
                },

            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容される最大エラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false に設定すると、mbps は無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート (Mbps)。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}</your_table_name></your_data_source_name>

一般的な Reader スクリプトパラメーター

パラメーター

説明

必須

デフォルト

endpoint

Tablestore インスタンスのエンドポイント。詳細については、「エンドポイント」をご参照ください。

はい

なし

accessId

Tablestore の AccessKey ID。

はい

なし

accessKey

Tablestore の AccessKey Secret。

はい

なし

instanceName

Tablestore インスタンスの名前。インスタンスは、Tablestore サービスを実行および管理するために使用されるエンティティです。

Tablestore を有効化した後、管理コンソールでインスタンスを作成します。その後、インスタンス内でテーブルを作成および管理できます。

インスタンスはリソース管理の基本単位です。アクセスの制御とリソースメータリングはインスタンスレベルで実行されます。

はい

なし

table

読み取るテーブルの名前。タスクごとに 1 つのテーブルのみ指定できます。

はい

なし

newVersion

使用する Tablestore Reader プラグインのバージョンを指定します。

  • false:レガシの Tablestore Reader。 ワイドテーブル行モード での読み取りのみをサポートします。

  • true:新しい Tablestore Reader。行モード列モード時系列テーブルワイドテーブル をサポートします。

新しい Tablestore Reader は新機能を提供し、システムリソースの消費が少なくなります。新しいバージョンを使用することを推奨します。

新しいプラグインは下位互換性があります。既存のタスクは、newVersion:true 設定を追加した後も期待どおりに実行できます。

いいえ

false

mode

読み取りモード。サポートされるモード:

  • normal:行モードでデータを読み取ります。データ形式は {プライマリキー列値, 属性列値} です。

  • multiVersion:列モードでデータを読み取ります。データ形式は {プライマリキー列, 属性列名, タイムスタンプ, 属性列値} です。

このパラメーターは、newVersion:true が設定されている場合にのみ有効です。

レガシの Tablestore Reader は mode 設定を無視し、行モードのみをサポートします。

いいえ

normal

isTimeseriesTable

テーブルが時系列テーブルであるかどうかを指定します。

  • false:テーブルはワイドテーブルです。

  • true:テーブルは時系列テーブルです。

このパラメーターは、newVersion:true & mode:normal が設定されている場合にのみ有効です。

レガシの Tablestore Reader は時系列テーブルをサポートしておらず、時系列テーブルは列モードで読み取ることはできません。

いいえ

false

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

以下のセクションでは、行モードのワイドテーブル、行モードの時系列テーブル、列モードのワイドテーブルの 3 つのシナリオでデータを読み取るための追加パラメーターについて説明します。

行モードのパラメーター (ワイドテーブル)

パラメーター

説明

必須

デフォルト

column

読み取る列を JSON 配列として指定します。Tablestore は NoSQL データベースであるため、列名を指定する必要があります。

  • 属性列を指定できます。例:{"name":"col1"}

  • 列のサブセットを読み取ることができます。列を設定しない場合、Tablestore Reader はそれを読み取りません。

  • 定数列を指定できます。例:{"type":"STRING", "value":"DataX"}type を使用して定数の型を記述します。サポートされる型には StringIntDoubleBoolBinary (値は Base64 エンコードされた文字列として指定) があります。また、Tablestore でシステム定義の最小値と最大値である INF_MININF_MAX も使用できます。INF_MIN または INF_MAX を使用する場合、エラーを避けるために value パラメーターを省略してください。

  • Tablestore は SQL のような関数や式を提供しておらず、Tablestore Reader もこの機能を提供できないため、関数やカスタム式はサポートされていません。

はい

なし

begin および end

begin および end パラメーターは、読み取るデータ範囲を指定します。

begin および end パラメーターは、Tablestore プライマリキーの範囲を指定します。無限の範囲には、{"type":"INF_MIN"}{"type":"INF_MAX"} を使用して、それぞれ beginend を表すことができます。ここで、type は抽出するデータの型を指定します。

説明
  • beginend のデフォルト範囲は [INF_MIN, INF_MAX) で、すべてのデータが読み取られることを意味します。

  • 設定された beginend の値の数がプライマリキー列の数より少ない場合、「左端プライマリキーマッチングの原則」が適用されます。設定されていないプライマリキー列の範囲は、デフォルトで [INF_MIN, INF_MAX) になります。

  • begin または end のみを設定した場合、データは [begin, INF_MAX) または [INF_MIN, end) の範囲から読み取られます。

  • プライマリキー列が 1 つしかない場合、beginend で定義される範囲は、左閉じ右開きの区間です。

  • 複数のプライマリキー列の場合、範囲は最後の列に対して左閉じ右開きであり、他のすべての列に対しては閉区間です。

たとえば、3 つのプライマリキー列 [Hundreds, Tens, Ones] を持つ Tablestore テーブルを考えます。テーブルには、(0,0,0) から (9,9,9) までのプライマリキーを持つ 1,000 行が含まれています。beginend パラメーターは次のように設定できます。

  • 例 1:Hundreds[3, 5] の範囲にあり、Tens[4, 6] の範囲にあるデータを読み取ります。読み取られるデータには、(3,4,0), (3,4,1), ..., (4,0,0), (4,0,1), ..., (5,5,8), (5,5,9) のようなプライマリキーが含まれます。設定は次のとおりです:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // 読み取る Hundreds の最小値を指定します。
            {"type":"INT", "value":"4"}  // 読み取る Tens の最小値を指定します。
          ],
          "end": [
            {"type":"INT", "value":"5"}, // 読み取る Hundreds の最大値を指定します。
            {"type":"INT", "value":"6"} // 読み取る Tens の最大値を指定します。
          ]
        }
  • 例 2:Hundreds[3, 5]Tens[4, 6]Ones[5, 7) の範囲にあるデータを読み取ります。読み取られるデータには、(3,4,5), (3,4,6), ..., (4,4,5), (4,4,6), ..., (5,6,5), (5,6,6) のようなプライマリキーが含まれます。設定は次のとおりです:

    "range": {
          "begin": [
            {"type":"INT", "value":"3"},  // 読み取る Hundreds の最小値を指定します。
            {"type":"INT", "value":"4"},  // 読み取る Tens の最小値を指定します。
            {"type":"INT", "value":"5"}  // 読み取る Ones の最小値を指定します。
          ],
          "end": [
            {"type":"INT", "value":"5"}, // 読み取る Hundreds の最大値を指定します。
            {"type":"INT", "value":"6"}, // 読み取る Tens の最大値を指定します。
            {"type":"INT", "value":"7"}  // 読み取る Ones の最大値を指定します。
          ]
        }

いいえ

(INF_MIN, INF_MAX)

split

これはカスタムデータ分割を定義するための高度なパラメーターであり、通常は必要ありません。

split パラメーターを使用して、各分割のデータ範囲を定義できます。これにより、Tablestore でのデータホットスポットを防ぐことができます。次のタスク設定を考えます:

{
  "range": {
    "begin": [{"type": "INF_MIN"}],
    "end":   [{"type": "INF_MAX"}],
    "split": [
      {"type": "STRING","value": "1"},
      {"type": "STRING","value": "2"},
      {"type": "STRING","value": "3"},
      {"type": "STRING","value": "4"},
      {"type": "STRING","value": "5"}
    ]
  }
}

タスクが実行されると、データは 6 つのセグメントに分割され、同時に読み取られます。セグメント数はタスクの同時実行数よりも多くすることを推奨します。

// セグメント 1
[最小値, 1)
// セグメント 2
[1, 2)
// セグメント 3
[2, 3)
// セグメント 4
[3, 4)
// セグメント 5
[4, 5)
// セグメント 6
[5, 最大値)

いいえ

split パラメーターが設定されていない場合、自動分割ロジックが使用されます。

このロジックは、パーティションキーの最小値と最大値を特定し、均等なセグメントを作成します。

パーティションキーは、整数型または文字列型にすることができます。整数型のキーは整数除算によってセグメント化されます。文字列型のキーは、最初の文字の Unicode コードポイントによってセグメント化されます。

行モードのパラメーター (時系列テーブル)

パラメーター

説明

必須

デフォルト

column

列定義の配列。定数列と属性列を設定できます。

定数列の場合、次のパラメーターを設定します:

  • type:必須。フィールド値のデータ型。サポートされる値:stringintdoubleboolbinary

  • value:必須。フィールドの値。

属性列の場合、次のパラメーターを設定します:

  • name:必須。列名。以下は時系列データの事前定義された名前です:

    • _m_name:タイムラインのメジャー名。データ型:String

    • _data_source:タイムラインのデータソース。データ型:String

    • _tags:タイムラインのタグ。データ型:String

    • _time:タイムラインのタイムスタンプ。データ型:Long

  • is_timeseries_tag:オプション。列が tags フィールド内のキーと値のペアであるかどうかを指定します。デフォルト値:false

  • type:オプション。フィールド値のデータ型。サポートされる値:stringintdoubleboolbinary。デフォルト値:string

次のスクリプトは、4 つの列を読み取る例です:

"column": [
  {
    "name": "_m_name"               // タイムラインのメジャー名フィールド。
  },
  {
    "name": "tag_key",                // タイムラインの tags フィールドの tag_key に対応する値。
    "is_timeseries_tag":"true"
  },
  {
    "name": "string_column",        // fields 内の string_column という名前の列。
    "type":"string"                    // データ型は string。
  },
  {
    "value": "constant_value",        // 値が "constant_value" に固定された定数列。
    "type":"string"
  }
],

はい

なし

measurementName

読み取るタイムラインのメジャー名。省略した場合、テーブル内のすべてのデータが読み取られます。

いいえ

なし

timeRange

読み取るデータの時間範囲。範囲は左閉じ右開きの区間 [begin, end) です。beginend より小さくなければなりません。タイムスタンプ単位はマイクロ秒です。形式は次のとおりです:

"timeRange":{
    // begin:オプション。デフォルト値:0。値は 0 から LONG_MAX の範囲でなければなりません。
    "begin":1400000000000,
    // end:オプション。デフォルト値:Long.MAX_VALUE (9223372036854775807)。値は 0 から LONG_MAX の範囲でなければなりません。
    "end"  :1600000000000
},

いいえ

すべてのバージョン

列モードのパラメーター (ワイドテーブル)

パラメーター

説明

必須

デフォルト

column

エクスポートする列。列モードでは属性列のみがサポートされます。

フォーマット:

"column": [
    {"name":"{your column name1}"},
    {"name":"{your column name2}"}
],
説明
  • 列モードでは定数列はサポートされていません。

  • プライマリキー列は指定できません。エクスポートされる 4 タプルには、デフォルトで完全なプライマリキーが含まれます。

  • 同じ列を複数回指定することはできません。

はい

すべての列

range

読み取るデータ範囲。範囲は左閉じ右開きの区間 [begin, end) です。次のルールが適用されます:

  • beginend より小さい場合、データは昇順で読み取られます。

  • beginend より大きい場合、データは降順で読み取られます。

  • beginend は等しくなることはできません。

type パラメーターでサポートされる型は次のとおりです:

  • string

  • int

  • binary:値は Base64 エンコードされた文字列でなければなりません。

  • INF_MIN:負の無限大を示します。

  • INF_MAX:正の無限大を示します。

フォーマット:

"range":{
    // オプション。範囲の開始を指定します。
    // 空の配列、プライマリキーのプレフィックス、または完全なプライマリキーを指定できます。プレフィックスを指定した場合、システムは不足しているプライマリキーのサフィックスを補完します。
    // 昇順では、サフィックスは INF_MIN で補完されます。降順では、INF_MAX で補完されます。
    // 例:
    // テーブルに string 型と int 型の 2 つのプライマリキー列がある場合、次の入力が有効です:
    // 1. テーブル全体を読み取る:
    //    "begin":[],"end":[],
    // 2. プライマリキー ("a", INT_MIN) から ("b", INT_MAX) まで読み取る:
    //    "begin":[{"type":"string", "value":"a"}],"end":[{"type":"string", "value":"b"}],
    // 3. プライマリキー ("a", INT_MIN) からテーブルの最後まで読み取る:
    //    "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],"end":[],    
    //
    // バイナリのプライマリキー列の場合、JSON はバイナリ値を直接サポートしないため、バイナリデータを Base64 エンコードされた文字列に変換する必要があります。
    // 例 (Java):
    //   byte[] bytes = "hello".getBytes();  // 文字列 "hello" からバイナリデータを構築します。
    //   String inputValue = Base64.encodeBase64String(bytes); // バイナリを文字列に変換します。結果は "aGVsbG8=" です。
    //   最終的な設定:{"type":"binary","value" : "aGVsbG8="}

    "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],

    // オプション。範囲の終了を指定します。
    // 空の配列、プライマリキーのプレフィックス、または完全なプライマリキーを指定できます。プレフィックスを指定した場合、システムは不足しているプライマリキーのサフィックスを補完します。
    // 昇順では、サフィックスは INF_MAX で補完されます。降順では、INF_MIN で補完されます。
    "end":[{"type":"string", "value":"g"},{"type":"INF_MAX"}],

    // オプション。大量のデータがある場合、同時エクスポートを有効にできます。
    // `split` パラメーターは、指定された分割ポイントに基づいて範囲を複数の同時タスクに分割します。
    //   1. `split` の値は、最初のプライマリキー列 (パーティションキー) のみであり、その型はパーティションキーの型と一致する必要があります。
    //   2. 値は `begin` と `end` で定義された範囲内でなければなりません。
    //   3. `split` の値は、`begin` と `end` の順序に対応して、昇順または降順でなければなりません。
    "split":[{"type":"string", "value":"b"}, {"type":"string", "value":"c"}]
},

いいえ

すべてのデータ

timeRange

読み取るデータの時間範囲。範囲は左閉じ右開きの区間 [begin, end) です。beginend より小さくなければなりません。タイムスタンプ単位はマイクロ秒です。

フォーマット:

"timeRange":{
    // begin:オプション。デフォルト値:0。有効な値:0 から LONG_MAX。
    "begin":1400000000000,
    // end:オプション。デフォルト値:Long.MAX_VALUE (9223372036854775807)。有効な値:0 から LONG_MAX。
    "end"  :1600000000000
},

いいえ

すべてのバージョン

maxVersion

各列で読み取るデータバージョンの最大数。有効な値:1 から INT32_MAX。

いいえ

すべてのバージョン

付録 II:Writer スクリプト例とパラメーター

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

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

Writer スクリプト例

行モード:ワイドテーブルへの書き込み

{
    "type":"job",
    "version":"2.0",// バージョン。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "table":"",// テーブル名。
                "newVersion":"true",// 新しいバージョンの Tablestore プラグインを使用します。
                "mode": "normal",// 行モードでデータを書き込みます。
                "isTimeseriesTable":"false",// テーブルが時系列テーブルではなく、ワイドテーブルであることを指定します。
                "primaryKey" : [// Tablestore テーブルのプライマリキー列。
                    {"name":"gid", "type":"INT"},
                    {"name":"uid", "type":"STRING"}
                 ],
                "column" : [// 書き込む列。
                      {"name":"col1", "type":"INT"},
                      {"name":"col2", "type":"DOUBLE"},
                      {"name":"col3", "type":"STRING"},
                      {"name":"col4", "type":"STRING"},
                      {"name":"col5", "type":"BOOL"}
                  ],
                "writeMode" : "PutRow"    // 書き込みモード。
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false の場合、mbps パラメーターは無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート。単位:MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

行モード:時系列テーブルへの書き込み

{
    "type":"job",
    "version":"2.0",// バージョン。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "table": "testTimeseriesTableName01",
                "mode": "normal",
                "newVersion": "true",
                "isTimeseriesTable":"true",
                "timeunit":"microseconds",
                "column": [
                      {
                        "name": "_m_name"
                      },
                      {
                        "name": "_data_source"
                      },
                      {
                        "name": "_tags"
                      },
                      {
                        "name": "_time"
                      },
                      {
                        "name": "string_1",
                        "type":"string"
                      },
                      {
                        "name":"tag3",
                        "is_timeseries_tag":"true"
                      }
                    ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false の場合、mbps パラメーターは無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート。単位:MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

列モード:ワイドテーブルへの書き込み

{
    "type":"job",
    "version":"2.0",// バージョン。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "table":"",
                "newVersion":"true",
                "mode":"multiVersion",
                "primaryKey" : [
                    "gid",
                    "uid"
                    ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// 許容されるエラーレコード数。
        },
        "speed":{
            "throttle":true,// 速度制限を有効または無効にします。false の場合、mbps パラメーターは無視されます。
            "concurrent":1, // タスクの同時実行数。
            "mbps":"12"// 速度制限のレート。単位:MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

一般的な Writer スクリプトパラメーター

パラメーター

説明

必須

デフォルト

datasource

DataWorks データソースの名前。この名前は、スクリプトに設定したデータソースと一致する必要があります。

はい

N/A

endPoint

Tablestore インスタンスのエンドポイント。詳細については、「エンドポイント」をご参照ください。

はい

N/A

accessId

Tablestore にアクセスするための AccessKey ID。

はい

N/A

accessKey

Tablestore にアクセスするための AccessKey Secret。

はい

N/A

instanceName

Tablestore インスタンスの名前。インスタンスは、Tablestore のリソース管理の基本単位であり、アプリケーションのアクセスの制御とリソースメータリングに使用されます。Tablestore を有効化した後、テーブルを作成する前に管理コンソールでインスタンスを作成します。

Tablestore サービスを有効化した後、管理コンソールでインスタンスを作成し、そのインスタンス内でテーブルを作成および管理する必要があります。インスタンスは、Tablestore のリソース管理の基本単位です。アプリケーションのすべてのアクセスの制御とリソースメータリングは、インスタンスレベルで実行されます。

はい

N/A

table

送信先テーブルの名前。1 つのテーブルのみ指定できます。

はい

N/A

newVersion

使用する Tablestore プラグインのバージョンを指定します。

  • false:レガシプラグイン。行モードでのワイドテーブルへの書き込みのみをサポートします。

  • true:新しいプラグイン。行モード列モード時系列テーブルワイドテーブル をサポートします。このバージョンは、自動採番主キー列機能もサポートします。

より多くの機能を提供し、リソース消費が少ないため、新しいプラグインの使用を推奨します。

newVersion: "true" 設定を追加することで、既存のタスクをアップグレードできます。

はい

false

mode

書き込みモードを指定します。以下のモードがサポートされています:

  • normal:標準形式 (行モード) でデータを書き込みます。

  • multiVersion:多バージョン形式 (列モード) でデータを書き込みます。

このパラメーターは、newVersion が true に設定されている場合にのみ有効です。

レガシの Tablestore Writer は mode 設定を無視し、行モードでの読み取りのみをサポートします。

いいえ

normal

isTimeseriesTable

送信先テーブルが時系列テーブルであるかどうかを指定します。

  • false:テーブルは通常のワイドテーブルです。

  • true:テーブルは時系列テーブルです。

このパラメーターは、newVersion が true に設定され、mode が normal に設定されている場合にのみ有効です。列モードは時系列テーブルと互換性がないためです。

いいえ

false

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

Tablestore プラグインは、行モードでのワイドテーブルへの書き込み、行モードでの時系列テーブルへの書き込み、列モードでのワイドテーブルへの書き込みのシナリオに応じて、異なるパラメーターを必要とします。以下のセクションでは、各ケースのパラメーターについて詳しく説明します。

行モードのパラメーター (ワイドテーブル)

パラメーター

説明

必須

デフォルト

primaryKey

Tablestore テーブルのプライマリキー列。各プライマリキー列の名前と型を宣言する必要があります。

DataWorks は型変換をサポートしています。ソースデータが STRING または INT 型でない場合、プラグインはデータ型を変換します。例:

"primaryKey" : [
    {"name":"gid", "type":"INT"},
    {"name":"uid", "type":"STRING"}
                 ],
説明

Tablestore のプライマリキー列は STRING と INT のデータ型のみをサポートします。したがって、プラグイン設定ではこれら 2 つの型のみを指定できます。

はい

N/A

column

書き込む属性列を JSON 配列として指定します。

例:

"column" : [
     {"name":"col1", "type":"INT"},
     {"name":"col2", "type":"DOUBLE"},
     {"name":"col3", "type":"STRING"},
     {"name":"col4", "type":"BINARY"},
     {"name":"col5", "type":"BOOL"}
              ],

この例では、name は Tablestore の送信先列の名前を指定し、type はデータ型を指定します。Tablestore は STRING、INT、DOUBLE、BOOL、BINARY のデータ型をサポートします。

説明

書き込みプロセス中に定数、関数、またはカスタム式はサポートされません。

はい

N/A

writeMode

書き込みモードを指定します。以下のモードがサポートされています:

  • PutRowPutRow API オペレーションに対応します。この操作は、新しい行を挿入するか、既存の行を完全に上書きします。

  • UpdateRowUpdateRow API オペレーションに対応します。この操作は、指定された行を更新します。行が存在しない場合は新しい行が作成されます。それ以外の場合、この操作は既存の行の指定された列を追加、変更、または削除します。

はい

N/A

enableAutoIncrement

自動採番主キー列を持つテーブルに書き込むかどうかを指定します。

  • true:プラグインは自動採番主キー列を自動的に検出し、入力します。primaryKey 配列でこの列を設定する必要はありません。

  • false:自動採番主キー列を持つテーブルに書き込もうとすると、エラーが発生します。

いいえ

false

requestTotalSizeLimitation

1 行の最大サイズ (バイト単位)。

いいえ

1MB

attributeColumnSizeLimitation

1 つの属性列の最大サイズ (バイト単位)。

いいえ

2MB

primaryKeyColumnSizeLimitation

1 つのプライマリキー列の最大サイズ (バイト単位)。

いいえ

1KB

attributeColumnMaxCount

属性列の最大数。

いいえ

1,024

行モードのパラメーター (時系列テーブル)

パラメーター

説明

必須

デフォルト

column

column 配列内の各オブジェクトは、ソース列を時系列データのコンポーネントにマッピングします。各オブジェクトに対して以下のパラメーターを設定できます:

  • name:必須。列名。以下は時系列データの事前定義された名前です:

    • _m_name:タイムラインのメジャー名。(データ型:String)

    • _data_source:タイムラインのデータソース。(データ型:String)

    • _tags:タイムラインのタグ。(データ型:String)。値は JSON 配列としてフォーマットされた文字列でなければなりません。例:["tagKey1=value1","tagKey2=value2"]

    • _time:データポイントのタイムスタンプ。(データ型:Long)。デフォルトの単位はマイクロ秒です。

  • is_timeseries_tag:オプション。true の場合、この列の名前と値がタグとして追加されます。デフォルト値:false

  • type:オプション。列の値のデータ型。サポートされる型:string、int、double、bool、binary。デフォルト値:string

_m_name_time 列は必須です。メジャー名とタイムスタンプは空にできないためです。

例:ソースレコードに以下の 6 つの列が含まれている場合:

mName1    source1    ["tag1=A","tag2=B"]    1677763080000000    field_value     C

以下の設定を使用します:

"column": [
      {
        "name": "_m_name"
      },
      {
        "name": "_data_source"
      },
      {
        "name": "_tags"
      },
      {
        "name": "_time"
      },
      {
        "name": "string_1",
        "type":"string"
      },
      {
        "name":"tag3",
        "is_timeseries_tag":"true"
      }
    ]

はい

N/A

timeunit

_time タイムスタンプ列の単位を指定します。サポートされる値:NANOSECONDSMICROSECONDSMILLISECONDSSECONDSMINUTES

いいえ

MICROSECONDS

列モードのパラメーター (ワイドテーブル)

パラメーター

説明

必須

デフォルト

primaryKey

テーブルのプライマリキー列。

設定コストを削減するため、レコード (行) 内の primaryKey の位置を設定する必要はありません。ただし、レコード形式は固定されている必要があります。primaryKey は行の先頭に配置し、columnNameprimaryKey の後に配置する必要があります。レコードのフォーマットは次のとおりです: {pk0,pk1...}, {columnName}, {timestamp}, {value}

例えば、次の 9 つのデータレコードがあるとします。

構成例は次のとおりです。

<p>以下は設定例です。</p>1,pk1,row1,1677699863871,value_0_0 1,pk1,row2,1677699863871,value_0_1 1,pk1,row3,1677699863871,value_0_2 2,pk2,row1,1677699863871,value_1_0 2,pk2,row2,1677699863871,value_1_1 2,pk2,row3,1677699863871,value_1_2 3,pk3,row1,1677699863871,value_2_0 3,pk3,row2,1677699863871,value_2_1 3,pk3,row3,1677699863871,value_2_2
"primaryKey" : [
    "gid",
    "uid"
    ],

データは次のようにワイドテーブルに書き込まれます。

gid     uid     row1        row2        row3
1       pk1     value_0_0   value_0_1   value_0_2
2       pk2     value_1_0   value_1_1   value_1_2
3       pk3     value_2_0   value_2_1   value_2_2

はい

N/A

columnNamePrefixFilter

列名から削除するプレフィックス。

HBase からインポートされたデータでは、cfqualifier が結合して columnName が形成されます。しかし、Tablestore は cf をサポートしていないため、cf をフィルターで除外する必要があります。

例: "columnNamePrefixFilter":"cf:"

説明
  • このパラメーターはオプションです。このパラメーターを指定しないか、空の文字列に設定した場合、列名に対するフィルタリングは実行されません。

  • columnName がこのプレフィックスで始まらないデータレコードは、ダーティデータとして扱われます。

いいえ

N/A

よくある質問

  • Q:自動採番主キー列を持つ送信先テーブルにデータを書き込むように Tablestore Writer を設定するにはどうすればよいですか?

    1. Tablestore Writer の設定には、以下の 2 つのパラメーターを含める必要があります:

      "newVersion": "true",
      "enableAutoIncrement": "true",
    2. Tablestore Writer の設定で、自動採番主キー列の名前を指定する必要はありません。

    3. primaryKeycolumn で指定された列の総数は、Tablestore Reader からの列数と一致する必要があります。

  • Q:時系列モデルの設定において、_tags フィールドと is_timeseries_tag フィールドの違いは何ですか?

    例:あるデータレコードには、phone=xiaomi、RAM=8G、camera=LEICA の 3 つのタグがあります。

    • データエクスポートの例 (Tablestore Reader)

      • 上記のすべてのタグをまとめて 1 つの列としてエクスポートするには、以下の設定を使用します:

        "column": [
              {
                "name": "_tags",
              }
            ],

        DataWorks は、タグを以下の形式で 1 つの列としてエクスポートします:

        ["phone=xiaomi","camera=LEICA","RAM=8G"]
      • phone タグと camera タグを別々の列としてエクスポートするには、以下の設定を使用します:

        "column": [
              {
                "name": "phone",
                "is_timeseries_tag":"true",
              },
              {
                "name": "camera",
                "is_timeseries_tag":"true",
              }
            ],

        DataWorks は、以下の形式で 2 つの列をエクスポートします:

        xiaomi, LEICA
    • データインポートの例 (Tablestore Writer)

      データソース (Tablestore Reader) が 2 つのデータ列を提供するとします:

      • 1 つの列には ["phone=xiaomi","camera=LEICA","RAM=8G"] が含まれています。

      • もう 1 つの列には 6499 が含まれています。

      これら 2 つの列のデータをタグとして処理するには、格式以下の設定を使用します:

      "column": [
            {
              "name": "_tags",
            },
            {
              "name": "price",
              "is_timeseries_tag":"true",
            },
          ],
      • 最初の列の設定では、["phone=xiaomi","camera=LEICA","RAM=8G"] 配列を tags フィールドにインポートします。

      • 2 番目の列の設定では、その名前と値からタグ price=6499 を作成し、tags フィールドに追加します。