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

DataWorks:Tablestore データソース

最終更新日:Oct 29, 2025

Tablestore は、Alibaba Cloud の Pangu ストレージ上に構築された NoSQL データストレージサービスです。Tablestore データソースは、Tablestore からのデータの読み取りと Tablestore へのデータの書き込みを行うための双方向チャネルを提供します。このトピックでは、DataWorks が Tablestore に提供するデータ同期機能について説明します。

制限事項

  • Tablestore Reader プラグインと Writer プラグインを使用すると、Tablestore からのデータの読み取りと Tablestore へのデータの書き込みが可能になります。これらのプラグインは、ワイドテーブルと時系列テーブルに対して、行モード列モードの 2 つのデータアクセス方法を提供します。

    • 列モード: Tablestore の多バージョンモデルでは、テーブル内のデータは > > バージョンの 3 レベルモデルに編成されます。1 つの行には任意の数の列を含めることができ、列名は固定されていません。各列には複数のバージョンを含めることができ、各バージョンには特定のタイムスタンプ (バージョン番号) があります。列モードでは、読み取るデータはプライマリキー値、列名、タイムスタンプ、列値で構成される 4 タプル形式です。書き込むデータも、プライマリキー値、列名、タイムスタンプ、列値で構成される 4 タプル形式です。

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

      行モードでは、データの各行は Tablestore テーブルのレコードに対応します。行モードで書き込まれるデータには、プライマリキー列の値と属性列の値が含まれます。

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

  • Tablestore Reader は、テーブルから読み取るデータ範囲を N 個のタスクに分割します。ここで N はデータ同期の同時実行レベルです。各タスクは Tablestore Reader スレッドによって実行されます。

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

Tablestore Reader と Tablestore Writer は、すべての Tablestore データ型をサポートしています。次の表にデータ型のマッピングを示します。

タイプカテゴリ

Tablestore データ型

整数

INTEGER

浮動小数点

DOUBLE

文字列

STRING

ブール値

BOOLEAN

バイナリ

BINARY

説明
  • Tablestore は日付型をサポートしていません。アプリケーション層では通常、Long 型を使用して UNIX タイムスタンプを格納します。

  • コードエディタで INTEGER 型のデータを INT として設定する必要があります。その後、DataWorks はそれを INTEGER 型に変換します。型を直接 INTEGER として設定すると、ログにエラーが報告され、タスクは失敗します。

データソースの追加

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

データ同期タスクの開発

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

単一テーブルオフライン同期タスク設定ガイド

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

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

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

Reader スクリプトのデモ

ワイドテーブルの行モード読み取り設定

{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "newVersion":"true",// otsreader の新しいバージョンを使用します。
                "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 は速度制限なしを示します。以下の速度制限は有効になりません。true は速度制限を示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

時系列テーブルの行モード読み取り設定

{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "table": "",// テーブル名。
                // 時系列データを読み取るには、mode を normal に設定する必要があります。
                "mode": "normal",
                // 時系列データを読み取るには、newVersion を true に設定する必要があります。
                "newVersion": "true",
                // テーブルを時系列テーブルとして設定します。
                "isTimeseriesTable":"true",
                // measurementName: 時系列データを読み取るメジャーの名前。このパラメーターはオプションです。空のままにすると、テーブル全体からデータが読み取られます。
                "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 は速度制限なしを示します。以下の速度制限は有効になりません。true は速度制限を示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

ワイドテーブルの列モード読み取り設定

{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"ots",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "table":"",// テーブル名。
                "newVersion":"true",// otsreader の新しいバージョン。
                "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 は速度制限なしを示します。以下の速度制限は有効になりません。true は速度制限を示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Reader スクリプトの一般パラメーター設定

パラメーター

説明

必須

デフォルト値

endpoint

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

はい

なし

accessId

Tablestore の AccessKey ID。

はい

なし

accessKey

Tablestore の AccessKey シークレット。

はい

なし

instanceName

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

Tablestore をアクティブ化した後、コンソールでインスタンスを作成する必要があります。その後、インスタンスでテーブルを作成および管理できます。

インスタンスは、Tablestore のリソース管理の基本単位です。アプリケーションのアクセス制御とリソース計測は、インスタンスレベルで実行されます。

はい

なし

table

データを読み取るテーブルの名前。1 つのテーブルのみ指定できます。Tablestore は複数テーブルの同期をサポートしていません。

はい

なし

newVersion

使用する Tablestore Reader プラグインのバージョン。

  • false: レガシーの Tablestore Reader を使用します。これはワイドテーブルを読み取るための行モードのみをサポートします。

  • true: 新しいバージョンの Tablestore Reader は、行モード列モード時系列テーブルワイドテーブルをサポートします。

新しいバージョンの 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 スクリプトの追加パラメーター設定

Tablestore Reader は、ワイドテーブルからの行モードでの読み取り、時系列テーブルからの行モードでの読み取り、およびワイドテーブルからの列モードでの読み取りをサポートします。次のセクションでは、各モードの追加設定について説明します。

ワイドテーブルの行モード読み取りパラメーター

パラメーター

説明

必須

デフォルト値

column

設定されたテーブルから同期する列名のセット。JSON 配列を使用してフィールド情報を記述します。Tablestore は NoSQL システムであるため、Tablestore Reader がデータを読み取る際にはフィールド名を指定する必要があります。

  • {"name":"col1"} のような通常の列の読み取りをサポートします。

  • 列のサブセットの読み取りをサポートします。列を設定しない場合、Tablestore Reader はそれを読み取りません。

  • {"type":"STRING", "value":"DataX"} のような定数列の読み取りをサポートします。`type` を使用して定数の型を記述します。サポートされている型は String、Int、Double、Bool、Binary (Base64 エンコーディングを使用)、INF_MIN (Tablestore のシステム定義の最小値。この値を使用する場合、`value` プロパティを指定しないでください。指定するとエラーが発生します)、および INF_MAX (Tablestore のシステム定義の最大値。この値を使用する場合、`value` プロパティを指定しないでください。指定するとエラーが発生します) です。

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

はい

なし

begin および end

beginend パラメーターは、Tablestore テーブルから読み取るデータの範囲を指定します。

beginend は、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)、(0,0,1)、... から (9,9,8)、(9,9,9) までのプライマリキーを持つ 1,000 列が含まれています。beginend パラメーターは次のように設定されます。

  • 例 1: Hundreds[3, 5] の範囲にあり、Tens[4, 6] の範囲にあるデータを読み取ります。読み取られるデータのプライマリキーには (3,4,0), (3,4,1), ..., (4,4,0), (4,0,1), ..., (5,6,8), (5,6,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

column は配列です。各要素は列を表します。定数列と通常の列を設定できます。

定数列の場合、次のフィールドを設定します:

  • type: フィールド値の型。このパラメーターは必須です。サポートされている型は string、int、double、bool、binary です。

  • value: フィールド値。このパラメーターは必須です。

通常の列の場合、次のフィールドを設定します:

  • name: 列名。このパラメーターは必須です。次のフィールドは事前定義されています。

    • タイムラインの 'メジャー名' は _m_name で識別されます。データ型は String です。

    • タイムラインの 'データソース' は _data_source で識別されます。データ型は String です。

    • タイムラインの 'タグ' は _tags で識別されます。データ型は String です。

    • タイムラインの 'タイムスタンプ' は _time で識別されます。データ型は Long です。

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

  • type: フィールド値の型。このパラメーターはオプションです。デフォルト値は string です。サポートされている型は string、int、double、bool、binary です。

次のスクリプトは、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) で、左閉右開の間隔です。`begin` は `end` より小さくなければなりません。タイムスタンプの単位はマイクロ秒です。形式は次のとおりです:

"timeRange":{
    // begin: オプション。デフォルト値: 0。値の範囲: 0 から LONG_MAX。
    "begin":1400000000000,
    // end: オプション。デフォルト値: Long Max (9223372036854775807L)。値の範囲: 0 から LONG_MAX。
    "end"  :1600000000000
},

いいえ

すべてのバージョン

ワイドテーブルの列モード読み取りパラメーター

パラメーター

説明

必須

デフォルト値

column

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

フォーマット:

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

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

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

はい

すべての列

range

読み取るデータの範囲。読み取り範囲は [begin, end) で、左閉右開の間隔です。さらに:

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

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

  • `begin` と `end` は等しくなることはできません。

`type` でサポートされる型は次のとおりです:

  • string

  • int

  • binary: 入力はバイナリデータの Base64 文字列です。

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

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

フォーマット:

"range":{
    // オプション。デフォルトでは、負の無限大から読み取りを開始します。
    // 値は空の配列、プライマリキープレフィックス、または完全なプライマリキーにすることができます。昇順で読み取る場合、プライマリキーのサフィックスはデフォルトで INF_MIN になります。降順で読み取る場合、デフォルトで INF_MAX になります。
    // 例:
    // テーブルに string 型と int 型の 2 つのプライマリキー列がある場合、次の 3 つの入力が有効です:
    // 1. テーブルの先頭からテーブルの末尾まで読み取る:
    // "begin":[],"end":[],
    // 2. 最初のプライマリキー値が "a" である 2 番目のプライマリキーの最小値から読み取りを開始します。最初のプライマリキー値が "b" である 2 番目のプライマリキーの最大値で読み取りを停止します:
    // "begin":[{"type":"string", "value":"a"}],"end":[{"type":"string", "value":"b"}],
    // 3. 最初のプライマリキー値が "a" である 2 番目のプライマリキーの最小値から読み取りを開始します。テーブルの末尾で読み取りを停止します:
    // "begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],"end":[],    
    //
    // プライマリキー列のバイナリ型は特別です。JSON はバイナリ入力を直接サポートしていないため、システムでは
    // (Java) Base64.encodeBase64String メソッドを使用してバイナリデータを可視文字列に変換し、この文字列を値に入力する必要があります。
    // 例 (Java):
    //   byte[] bytes = "hello".getBytes();  // バイナリデータを構築します。ここでは文字列 "hello" のバイト値を使用します。
    //   String inputValue = Base64.encodeBase64String(bytes) // Base64 メソッドを呼び出してバイナリデータを可視文字列に変換します。
    //   上記のコードが実行された後、inputValue は "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) で、左閉右開の間隔です。`begin` は `end` より小さくなければなりません。タイムスタンプの単位はマイクロ秒です。

フォーマット:

"timeRange":{
    // begin: オプション。デフォルト値: 0。値の範囲: 0 から LONG_MAX。
    "begin":1400000000000,
    // end: オプション。デフォルト値: Long Max (9223372036854775807L)。値の範囲: 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",// otswriter の新しいバージョンを使用します。
                "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,// throttle が false の場合、mbps パラメーターは効果がなく、速度制限がないことを示します。throttle が true の場合、速度制限があることを示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。1 mbps = 1 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,// throttle が false の場合、mbps パラメーターは効果がなく、速度制限がないことを示します。throttle が true の場合、速度制限があることを示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。1 mbps = 1 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,// throttle が false の場合、mbps パラメーターは効果がなく、速度制限がないことを示します。throttle が true の場合、速度制限があることを示します。
            "concurrent":1, // ジョブの同時実行数。
            "mbps":"12"// 速度制限。1 mbps = 1 MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Writer スクリプトの一般パラメーター設定

パラメーター

説明

必須

デフォルト値

datasource

データソース名。コードエディタはデータソースの追加をサポートしています。このパラメーターの値は、追加されたデータソースの名前と同じでなければなりません。

はい

なし

endPoint

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

はい

なし

accessId

Tablestore の AccessKey ID。

はい

なし

accessKey

Tablestore の AccessKey シークレット。

はい

なし

instanceName

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

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

はい

なし

table

データを書き込むテーブルの名前。1 つのテーブルのみ指定できます。Tablestore は複数テーブルの同期をサポートしていません。

はい

なし

newVersion

使用する Tablestore Writer プラグインのバージョン。

  • false: 古いバージョンの Tablestore Writer。行モードでワイドテーブルに書き込むことのみをサポートします。

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

新しいバージョンの Tablestore Writer は新機能をサポートし、消費するシステムリソースが少なくなります。新しいバージョンの Tablestore Writer を使用することをお勧めします。

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

はい

false

mode

データを書き込むモード。次の 2 つのモードがサポートされています:

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

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

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

古いバージョンの Tablestore Writer は mode 設定を無視し、行モードのみをサポートします。

いいえ

normal

isTimeseriesTable

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

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

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

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

いいえ

false

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

Tablestore Writer は、ワイドテーブルへの行モードでの書き込み、時系列テーブルへの行モードでの書き込み、およびワイドテーブルへの列モードでの書き込みをサポートします。次のセクションでは、各モードの追加設定について説明します。

ワイドテーブルの行モード書き込みパラメーター

パラメーター

説明

必須

デフォルト値

primaryKey

Tablestore のプライマリキー情報。JSON 配列を使用してフィールド情報を記述します。Tablestore は NoSQL システムであるため、Tablestore Writer がデータをインポートする際にはフィールド名を指定する必要があります。

データ同期システムは型変換をサポートしています。したがって、ソースデータが STRING または INT 型でない場合、Tablestore Writer はデータ型変換を実行します。次のコードは設定例です。

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

Tablestore のプライマリキーは STRING 型と INT 型のみをサポートします。したがって、Tablestore Writer も型を STRING と INT に制限します。

はい

なし

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 型をサポートします。

説明

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

はい

なし

writeMode

Tablestore にデータを書き込むモード。次の 2 つのモードがサポートされています:

  • PutRow: Tablestore API の PutRow に対応します。指定された行にデータを挿入します。行が存在しない場合は新しい行が追加されます。行が存在する場合は、元の行が上書きされます。

  • UpdateRow: Tablestore API の UpdateRow に対応します。指定された行のデータを更新します。行が存在しない場合は新しい行が追加されます。行が存在する場合は、リクエストの内容に基づいてこの行の指定された列の値を追加、変更、または削除します。

はい

なし

enableAutoIncrement

自動採番主キー列を含む Tablestore テーブルへのデータ書き込みを許可するかどうかを指定します。

  • true: プラグインは宛先テーブルの自動インクリメント列情報を自動的にスキャンし、データ書き込み時に自動インクリメント列を追加します。自動インクリメント列名を設定する必要はありません。

  • false: 自動採番主キー列を持つテーブルに書き込むときにエラーが報告されます。

いいえ

false

requestTotalSizeLimitation

このパラメーターは、Tablestore に書き込む際の 1 行のデータのサイズを制限します。設定タイプは数値です。

いいえ

1 MB

attributeColumnSizeLimitation

このパラメーターは、Tablestore に書き込む際の単一の属性列のサイズを制限します。設定タイプは数値です。

いいえ

2 MB

primaryKeyColumnSizeLimitation

このパラメーターは、Tablestore に書き込む際の単一のプライマリキー列のサイズを制限します。設定タイプは数値です。

いいえ

1 KB

attributeColumnMaxCount

このパラメーターは、Tablestore に書き込む際の属性列の数を制限します。設定タイプは数値です。

いいえ

1,024

時系列テーブルの行モード書き込みパラメーター

パラメーター

説明

必須

デフォルト値

column

`column` の各要素は、時系列データのフィールドに対応します。各要素に対して次のパラメーターを設定できます。

  • name: 列名。このパラメーターは必須です。次のフィールドは事前定義されています:

    • タイムラインの 'メジャー名' は _m_name で識別されます。データ型は String です。

    • タイムラインの 'データソース' は _data_source で識別されます。データ型は String です。

    • タイムラインの 'タグ' は _tags で識別されます。データ型は String です。文字列形式は ["tagKey1=value1","tagKey2=value2"] です。

    • タイムラインの 'タイムスタンプ' は _time で識別されます。データ型は Long です。デフォルトの単位はマイクロ秒です。

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

  • type: フィールド値の型。このパラメーターはオプションです。デフォルト値は string です。サポートされている型は string、int、double、bool、binary です。

時系列データのメジャー名とタイムスタンプは空にできないため、_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",
      }
    ],

はい

なし

timeunit

設定された `_time` タイムスタンプフィールドの単位。サポートされている単位は NANOSECONDSMICROSECONDSMILLISECONDSSECONDSMINUTES です。

いいえ

MICROSECONDS

ワイドテーブルの列モード書き込みパラメーター

パラメーター

説明

必須

デフォルト値

primaryKey

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

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

たとえば、次の 9 つのレコードがあるとします:

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

はい

なし

columnNamePrefixFilter

列名プレフィックスフィルター。

Hbase からインポートされたデータの場合、cfqulifier が一緒になって columnName を形成します。ただし、Tablestore は cf をサポートしていないため、cf をフィルターで除外する必要があります。

設定例: "columnNamePrefixFilter":"cf:"

説明
  • このパラメーターはオプションです。指定されていないか、値が空の文字列の場合、列名はフィルター処理されません。

  • Data Integration を介して追加されたデータの columnName がプレフィックスで始まらない場合、レコードはダーティデータコレクターに送信されます。

いいえ

なし

よくある質問

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

    1. Tablestore Writer の設定には、次の 2 行を含める必要があります:

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

    3. Tablestore Writer では、primaryKey エントリの数と column エントリの数の合計が、上流の Tablestore Reader データの列数と等しくなければなりません。

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

    例: あるレコードに 3 つのタグがあります: [Phone=Xiaomi, Memory=8G, Camera=Leica]。数据

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

      • 上記のタグをマージして単一の列としてエクスポートする場合、次の設定を使用します:

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

        DataWorks はタグを単一のデータ列としてエクスポートし、その形式は次のようになります:

        ["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)

      上流のデータソース (Reader) に 2 列のデータがあると仮定します:

      • 1 列のデータは: ["phone=xiaomi","camera=LEICA","RAM=8G"] です。

      • もう 1 列のデータは: 6499 です。

      両方の列をタグに追加したいとします。書き込み後のタグフィールドの期待される形式は次のとおりです:格式次の設定を使用します:

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

      • 2 番目の列の設定では、price=6499 を個別にタグフィールドにインポートします。