日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

Tablestore數(shù)據(jù)源

表格存儲Tablestore是構(gòu)建在阿里云飛天分布式系統(tǒng)之上的NoSQL數(shù)據(jù)存儲服務(wù),Tablestore數(shù)據(jù)源為您提供讀取和寫入Tablestore雙向通道的功能,本文為您介紹DataWorks的Tablestore數(shù)據(jù)同步的能力支持情況。

使用限制

  • Tablestore Reader和Writer插件實現(xiàn)了從Tablestore讀取和寫入數(shù)據(jù),包含行模式列模式兩種數(shù)據(jù)讀取與寫入方式,可針對寬表與時序表進行數(shù)據(jù)讀取與寫入。

    • 列模式:在Tablestore多版本模型下,表中的數(shù)據(jù)組織為 > > 版本三級的模式, 一行可以有任意列,列名并不是固定的,每一列可以含有多個版本,每個版本都有一個特定的時間戳(版本號)。列模式會將數(shù)據(jù)導(dǎo)出為(主鍵值,列名,時間戳,列值)的四元組格式,列模式下導(dǎo)入的數(shù)據(jù)也是(主鍵值,列名,時間戳,列值)的四元組格式。

    • 行模式:該模式將用戶每次更新的記錄,抽取成行的形式導(dǎo)出,即(主鍵值,列值)的格式。

      行模式下每一行數(shù)據(jù)對應(yīng)TableStore表中的一條數(shù)據(jù)。寫入行模式的數(shù)據(jù)包含主鍵列列值、普通列列值兩部分。

  • Tablestore列由主鍵列primaryKey+普通列column組成,源端列順序需要和Tablestore目的端主鍵列+普通列保持一致,否則會產(chǎn)生列映射錯誤。

  • Tablestore Reader會根據(jù)一張表中待讀取的數(shù)據(jù)的范圍,按照數(shù)據(jù)同步并發(fā)的數(shù)目N,將范圍等分為N份Task。每個Task都會有一個Tablestore Reader線程來執(zhí)行。

支持的字段類型

目前Tablestore Reader和Tablestore Writer支持所有Tablestore類型,其針對Tablestore類型的轉(zhuǎn)換列表,如下所示。

類型分類

Tablestore數(shù)據(jù)類型

整數(shù)類

INTEGER

浮點類

DOUBLE

字符串類

STRING

布爾類

BOOLEAN

二進制類

BINARY

說明
  • Tablestore本身不支持日期型類型。應(yīng)用層通常使用Long保存時間的Unix TimeStamp。

  • 您需要將INTEGER類型的數(shù)據(jù),在腳本模式中配置為INT類型,DataWorks會將其轉(zhuǎn)換為INTEGER類型。如果您直接配置為INTEGER類型,日志將會報錯,導(dǎo)致任務(wù)無法順利完成。

數(shù)據(jù)同步任務(wù)開發(fā)

Tablestore數(shù)據(jù)同步任務(wù)的配置入口和通用配置流程指導(dǎo)可參見下文的配置指導(dǎo),詳細的配置參數(shù)解釋可在配置界面查看對應(yīng)參數(shù)的文案提示。

創(chuàng)建數(shù)據(jù)源

在進行數(shù)據(jù)同步任務(wù)開發(fā)時,您需要在DataWorks上創(chuàng)建一個對應(yīng)的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源

單表離線同步任務(wù)配置指導(dǎo)

附錄:Reader腳本Demo與參數(shù)說明

如果您配置離線任務(wù)時使用腳本模式的方式進行配置,您需要在任務(wù)腳本中按照腳本的統(tǒng)一格式要求編寫腳本中的reader參數(shù)和writer參數(shù),腳本模式的統(tǒng)一要求請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下的數(shù)據(jù)源的Reader參數(shù)和Writer參數(shù)的指導(dǎo)詳情。

Reader腳本Demo

行模式讀取寬表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "newVersion":"true",//使用新版otsreader
                "mode": "normal",// 行模式讀取數(shù)據(jù)
                "isTimeseriesTable":"false",// 配置該表為寬表(非時序表)
                "column":[//字段。
                    {
                        "name":"column1"http://字段名。
                    },
                    {
                        "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":""http://表名。
            },
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true,//false代表不限流,下面的限流的速度不生效,true代表限流。
            "concurrent":1 //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

行模式讀時序表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "table": "",//表名
                // 讀時序數(shù)據(jù)mode必須為normal
                "mode": "normal",
                // 讀時序數(shù)據(jù)newVersion必須為true
                "newVersion": "true",
                // 配置該表為時序表
                "isTimeseriesTable":"true",
                // measurementName:配置需要讀取時序數(shù)據(jù)的度量名稱,非必需,為空則讀取全表數(shù)據(jù)
                "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"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true,//false代表不限流,下面的限流的速度不生效,true代表限流。
            "concurrent":1 //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

列模式讀取寬表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "table":"",//表名
                "newVersion":"true",//新版otsreader
                "mode": "multiversion",//多版本模式
                "column":[//配置需要導(dǎo)出的列名稱(必須是非主鍵列)
                    {"name":"mobile"},
                    {"name":"name"},
                    {"name":"age"},
                    {"name":"salary"},
                    {"name":"marry"}
                ],
                "range":{//導(dǎo)出的范圍
                    "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"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true,//false代表不限流,下面的限流的速度不生效,true代表限流。
            "concurrent":1 //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Reader腳本參數(shù)通用配置

參數(shù)

描述

是否必選

默認值

endpoint

Tablestore Server的EndPoint(服務(wù)地址),詳情請參見服務(wù)地址

accessId

Tablestore的AccessKey ID。

accessKey

Tablestore的AccessKey Secret。

instanceName

Tablestore的實例名稱,實例是您使用和管理Tablestore服務(wù)的實體。

您在開通Tablestore服務(wù)后,需要通過管理控制臺來創(chuàng)建實例,然后在實例內(nèi)進行表的創(chuàng)建和管理。

實例是Tablestore資源管理的基礎(chǔ)單元,Tablestore對應(yīng)用程序的訪問控制和資源計量都在實例級別完成。

table

所選取的需要抽取的表名稱,這里有且只能填寫一張表。在Tablestore不存在多表同步的需求。

newVersion

定義了使用的Tablestore Reader插件的版本。

  • false:舊版本Tablestore Reader,僅支持行模式讀取寬表

  • true:新版本Tablestore Reader,支持行模式列模式時序表寬表

新版Tablestore Reader除了支持新的功能,對系統(tǒng)資源的開銷也相對較低,因此推薦使用新版Tablestore Reader。

新版本插件配置兼容了舊版本插件的配置,即舊任務(wù)增加newVersion=true配置之后,可以正常運行。

false

mode

定義了讀取數(shù)據(jù)的模式,當(dāng)前支持兩種模式:

  • normal:行模式讀取數(shù)據(jù),數(shù)據(jù)格式為{主鍵列值,普通列值}。

  • multiVersion:列模式讀取數(shù)據(jù),數(shù)據(jù)格式為{主鍵列,普通列名,時間戳,普通列名對應(yīng)列值}。

本配置僅在新版Tablestore Reader(newVersion:true)配置下生效。

舊版Tablestore Reader會忽略mode配置,并僅支持行模式讀取。

normal

isTimeseriesTable

定義了操作的數(shù)據(jù)表是否為時序數(shù)據(jù)表:

  • false:數(shù)據(jù)表為普通的寬表。

  • true:數(shù)據(jù)表為時序數(shù)據(jù)表。

本配置僅在newVersion:true & mode:normal配置下生效。

舊版Tablestore Reader不支持時序表,且時序表無法按列模式讀取。

false

Reader腳本參數(shù)附加配置

Tablestore Reader支持行模式讀取寬表、行模式讀取時序表、列模式讀取寬表。下面為您介紹各模式的附加配置。

行模式讀寬表參數(shù)

參數(shù)

描述

是否必選

默認值

column

所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。由于Tablestore本身是NoSQL系統(tǒng),在Tablestore Reader抽取數(shù)據(jù)過程中,必須指定相應(yīng)的字段名稱。

  • 支持普通的列讀取,例如{"name":"col1"}。

  • 支持部分列讀取,如果您不配置該列,則Tablestore Reader不予讀取。

  • 支持常量列讀取,例如{"type":"STRING", "value":"DataX"}。使用type描述常量類型,目前支持String、Int、Double、Bool、Binary(使用Base64編碼填寫)、INF_MIN(Tablestore的系統(tǒng)限定最小值,如果使用該值,您不能填寫value屬性,否則報錯)、INF_MAX(Tablestore的系統(tǒng)限定最大值,如果使用該值,您不能填寫value屬性,否則報錯)。

  • 不支持函數(shù)或者自定義表達式,由于Tablestore本身不提供類似SQL的函數(shù)或者表達式功能,Tablestore Reader也不能提供函數(shù)或表達式列功能。

beginend

beginend配置項用于表示抽取Tablestore表數(shù)據(jù)的范圍。

beginend描述的是Tablestore PrimaryKey的區(qū)間分布狀態(tài),對于無限大小的區(qū)間,您可以使用{"type":"INF_MIN"}{"type":"INF_MAX"}分別指代beginend,其中type表示抽取數(shù)據(jù)的類型。

說明
  • beginend配置項默認值為[INF_MIN,INF_MAX),即讀取全部數(shù)據(jù)。

  • 當(dāng)配置的beginend數(shù)量小于主鍵數(shù)量時,依據(jù)最左主鍵匹配原則,未配置的主鍵范圍默認為[INF_MIN,INF_MAX)

  • 當(dāng)只配置了beginend中的一項時,導(dǎo)出的數(shù)據(jù)范圍為[begin, INF_MAX)[INF_MIN, end)

  • 當(dāng)僅有一個主鍵列時,beginend配置導(dǎo)出數(shù)據(jù)遵循左閉右開規(guī)則。

  • 當(dāng)有多個主鍵列時,最后一個主鍵列導(dǎo)出遵循左閉右開規(guī)則,其他主鍵列為左右閉區(qū)間。

例如,對一張主鍵為[Hundreds, Tens,Ones]的三主鍵Tablestore表進行數(shù)據(jù)抽取,表中的數(shù)據(jù)的主鍵分別為:(0,0,0)(0,0,1)(0,0,2)(0,0,3)......(9,9,8)(9,9,9),共1000列。beginend的配置如下所示。

  • 示例一:抽取Hundreds的范圍為[3,5]Tens的范圍為[4,6]。抽取的數(shù)據(jù)主鍵包含(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的最大值。
          ]
        }
  • 示例二:抽取Hundreds的范圍為[3,5]Tens的范圍為[4,6]Ones范圍為[5,7)。抽取的數(shù)據(jù)主鍵包含(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參數(shù)可以自己定義分片的數(shù)據(jù)范圍,通常在Tablestore 數(shù)據(jù)存儲發(fā)生熱點,可以使用自定義的切分規(guī)則,以下任務(wù)配置為例:

{
  "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"}
    ]
  }

任務(wù)運行時,數(shù)據(jù)會切分成6個段,并發(fā)讀取。分段數(shù)量建議比任務(wù)并發(fā)數(shù)大。

// 第 1 段
[最小值, 1)
// 第 2 段
[1, 2)
// 第 3 段
[2, 3)
// 第 4 段
[3, 4)
// 第 5 段
[4, 5)
// 第 6 段
[5, 最大值)

當(dāng)split參數(shù)未配置時,使用自動切分邏輯。

自動切分邏輯會找出 Partition Key最大、最小值,并進行均勻分段。

Partition Key支持整型和字符串,整型使用整除來分段,字符串使用第一個字符的unicode碼來分段。

行模式讀時序表參數(shù)

參數(shù)

描述

是否必選

默認值

column

column是一個數(shù)組,每個元素表示一列,可配置常量列與普通列兩種類型。

對于常量列,需要配置以下字段:

  • type:字段值類型,必需配置。目前支持string、int、double、bool、binary。

  • value : 字段值,必需配置。

對于普通列,需要配置以下字段:

  • name :列名,必需配置。以下為預(yù)定義的字段。

    • 時間線的'度量名稱'使用_m_name標識,數(shù)據(jù)類型為String。

    • 時間線的'數(shù)據(jù)源'使用_data_source標識,數(shù)據(jù)類型為String。

    • 時間線的'標簽'使用_tags標識,數(shù)據(jù)類型為String。

    • 時間線的'時間戳'使用_time標識,數(shù)據(jù)類型為Long。

  • is_timeseries_tag:該列是否為tags字段內(nèi)部的鍵值,非必需配置,默認為false。

  • type:字段值類型,非必需配置,默認為string。目前支持 string、int、double、bool、binary。

讀出四列數(shù)據(jù)的腳本示例:

"column": [
  {
    "name": "_m_name"               // 時間線的度量名稱字段
  },
  {
    "name": "tag_key",                // 時間線中標簽字段內(nèi)tag_key對應(yīng)的value
    "is_timeseries_tag":"true"
  },
  {
    "name": "string_column",        // fields中名稱為string_column
    "type":"string"                    // 且數(shù)據(jù)類型為string的列
  },
  {
    "value": "constant_value",        // 常量列,值固定為"constant_value"
    "type":"string"
  }
],

measurementName

配置需要讀取時間線的度量名稱。若不配置則讀取全表數(shù)據(jù)。

timeRange

請求數(shù)據(jù)的時間范圍,讀取的范圍是[begin,end),左閉右開的區(qū)間,且begin必須小于end,時間戳單位為毫秒。格式如下:

"timeRange":{
    // begin:非必選,默認為0,取值范圍是0~LONG_MAX
    "begin":1400000000000,
    // end:非必選,默認為Long Max(9223372036854775807L),取值范圍是0~LONG_MAX
    "end"  :1600000000000
},

全部版本

列模式讀寬表參數(shù)

參數(shù)

描述

是否必選

默認值

column

指定要導(dǎo)出的列,在列模式下只支持普通列。

格式:

"column": [
    {"name1":"{your column name1}"},
    {"name2":"{your column name2}"}
],
說明
  • 在列模式下,不支持常量列。

  • PK列不能指定,導(dǎo)出4元組中默認包括完整的PK。

  • 不能重復(fù)指定列。

所有列

range

讀取的數(shù)據(jù)范圍,讀取的范圍為[begin,end),左閉右開的區(qū)間,并且:

  • begin小于end,表示正序讀取數(shù)據(jù)。

  • begin大于end,表示反序讀取數(shù)據(jù)。

  • begin和end不能相等。

type支持的類型有如下幾類:

  • string

  • int

  • binary:輸入的方式采用二進制的Base64字符串形式傳入。

  • INF_MIN:表示無限小。

  • INF_MAX:表示無限大。

格式:

"range":{
    // 可選,默認表示從無限小開始讀取
    // 這個值的輸入可以填寫空數(shù)組,或者PK前綴,亦或者完整的PK,在正序讀取數(shù)據(jù)時,默認填充PK后綴為INF_MIN,反序為INF_MAX
    // 例子:
    // 如果用戶的表有2個PK,類型分別為string、int,那么如下3種輸入都是合法,如:
    //1. 從表的開始位置讀取 -> 讀取到表的結(jié)束為止:
    //"begin":[],"end":[],
    //2. 從第一列主鍵值為"a",第二列主鍵的最小值開始讀取 -> 讀取到第一列主鍵值為"b",第二列主鍵的最大值:
    //"begin":[{"type":"string", "value":"a"}],"end":[{"type":"string", "value":"b"}],
    //3. 從第一列主鍵值為"a",第二列主鍵的最小值開始讀取 -> 讀取到表的結(jié)束位置:
    //"begin":[{"type":"string", "value":"a"},{"type":"INF_MIN"}],"end":[],    
    //
    // binary類型的PK列比較特殊,因為Json不支持直接輸入二進制數(shù),所以系統(tǒng)定義:用戶如果要傳入
    // 二進制,必須使用(Java)Base64.encodeBase64String方法,將二進制轉(zhuǎn)換為一個可視化的字符串,然后將這個字符串填入value中
    // 例子(Java):
    //   byte[] bytes = "hello".getBytes();  # 構(gòu)造一個二進制數(shù)據(jù),這里使用字符串hello的byte值
    //   String inputValue = Base64.encodeBase64String(bytes) # 調(diào)用Base64方法,將二進制轉(zhuǎn)換為可視化的字符串
    //   上面的代碼執(zhí)行之后,可以獲得inputValue為"aGVsbG8="
    //   最終寫入配置:{"type":"binary","value" : "aGVsbG8="}

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

    // 默認表示讀取到無限大結(jié)束
    // 這個值得輸入可以填寫空數(shù)組,或者PK前綴,亦或者完整的PK,在正序讀取數(shù)據(jù)時,默認填充PK后綴為INF_MAX,反序為INF_MIN
    // 可選
    "end":[{"type":"string", "value":"g"},{"type":"INF_MAX"}],

    // 當(dāng)前用戶數(shù)據(jù)較多時,需要開啟并發(fā)導(dǎo)出,Split可以將當(dāng)前范圍的數(shù)據(jù)按照切分點切分為多個并發(fā)任務(wù)
    // 可選
    //   1. split中的輸入值只能PK的第一列(分片建),且值的類型必須和PartitionKey一致
    //   2. 值的范圍必須在begin和end之間
    //   3. split內(nèi)部的值必須根據(jù)begin和end的正反序關(guān)系而遞增或者遞減
    "split":[{"type":"string", "value":"b"}, {"type":"string", "value":"c"}]
},

全部數(shù)據(jù)

timeRange

請求數(shù)據(jù)的時間范圍,讀取的范圍是[begin,end),左閉右開的區(qū)間,且begin必須小于end,時間戳單位為毫秒。

格式:

"timeRange":{
    // begin:非必選,默認為0,取值范圍是0~LONG_MAX
    "begin":1400000000000,
    // end:非必選,默認為Long Max(9223372036854775807L),取值范圍是0~LONG_MAX
    "end"  :1600000000000
},

全部版本

maxVersion

請求的最大數(shù)據(jù)版本數(shù),取值范圍是1~INT32_MAX。

全部版本

附錄:Writer腳本Demo與參數(shù)說明

如果您配置離線任務(wù)時使用腳本模式的方式進行配置,您需要在任務(wù)腳本中按照腳本的統(tǒng)一格式要求編寫腳本中的reader參數(shù)和writer參數(shù),腳本模式的統(tǒng)一要求請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下的數(shù)據(jù)源的Reader參數(shù)和Writer參數(shù)的指導(dǎo)詳情。

Writer腳本Demo

行模式寫入寬表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "table":"",//表名。
                "newVersion":"true",//使用新版otswriter
                "mode": "normal",// 行模式寫入數(shù)據(jù)
                "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"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true,//當(dāng)throttle值為false時,mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時,表示限流。
            "concurrent":1, //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

行模式寫時序表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "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"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true,//當(dāng)throttle值為false時,mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時,表示限流。
            "concurrent":1, //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

列模式寫入寬表配置

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"ots",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "table":"",
                "newVersion":"true",
                "mode":"multiVersion",
                "primaryKey" : [
                    "gid",
                    "uid"
                    ]
            },
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"http://錯誤記錄數(shù)。
        },x`
        "speed":{
            "throttle":true,//當(dāng)throttle值為false時,mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時,表示限流。
            "concurrent":1, //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Writer腳本參數(shù)通用配置

參數(shù)

描述

是否必選

默認值

datasource

數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,該配置項填寫的內(nèi)容必須與添加的數(shù)據(jù)源名稱保持一致。

endPoint

Tablestore Server的EndPoint(服務(wù)地址),詳情請參見服務(wù)地址

accessId

Tablestore的AccessKey ID。

accessKey

Tablestore的AccessKey Secret。

instanceName

Tablestore的實例名稱,實例是您使用和管理Tablestore服務(wù)的實體。

您在開通Tablestore服務(wù)后,需要通過管理控制臺來創(chuàng)建實例,然后在實例內(nèi)進行表的創(chuàng)建和管理。實例是Tablestore資源管理的基礎(chǔ)單元,Tablestore對應(yīng)用程序的訪問控制和資源計量都在實例級別完成。

table

所選取的需要抽取的表名稱,此處能且只能填寫一張表。在Tablestore中不存在多表同步的需求。

newVersion

定義了使用的Tablestore Writer插件版本。

  • false:舊版本Tablestore Writer,僅支持行模式寫入寬表。

  • true:新版本Tablestore Writer,支持行模式列模式時序表寬表,且支持主鍵字增列功能。

新版Tablestore Writer除了支持新的功能,對系統(tǒng)資源的開銷也相對較低,因此推薦使用新版Tablestore Writer。

新版插件兼容舊版本插件配置,即舊任務(wù)增加newVersion=true配置之后,可以正常運行。

false

mode

定義了寫入數(shù)據(jù)的模式,當(dāng)前支持兩種模式

  • normal:寫入普通格式的數(shù)據(jù)(行模式)。

  • multiVersion:寫入多版本格式的數(shù)據(jù)(列模式)。

本配置僅在newVersion:true配置下生效

舊版Tablestore Writer會忽略mode配置,并僅支持行模式讀取。

normal

isTimeseriesTable

定義了操作的數(shù)據(jù)表是否為時序數(shù)據(jù)表。

  • false:數(shù)據(jù)表為普通的寬表。

  • true:數(shù)據(jù)表為時序數(shù)據(jù)表。

本配置僅在newVersion:true & mode:normal配置下生效(列模式不兼容時序表)。

false

Writer腳本參數(shù)附加配置

Tablestore Writer支持行模式寫入寬表、行模式寫入時序表、列模式寫入寬表。下面介紹各模式的附加配置。

行模式寫寬表參數(shù)

參數(shù)

描述

是否必選

默認值

primaryKey

Tablestore的主鍵信息,使用JSON的數(shù)組描述字段信息。Tablestore本身是NoSQL系統(tǒng),在Tablestore Writer導(dǎo)入數(shù)據(jù)過程中,必須指定相應(yīng)的字段名稱。

數(shù)據(jù)同步系統(tǒng)本身支持類型轉(zhuǎn)換的,因此對于源頭數(shù)據(jù)非STRING/INT,Tablestore Writer會進行數(shù)據(jù)類型轉(zhuǎn)換。配置示例如下。

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

Tablestore的PrimaryKey僅支持STRING和INT類型,因此Tablestore Writer本身也限定填寫STRING和INT兩種類型。

column

所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。

配置示例:

"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類型。

說明

寫入過程不支持常量、函數(shù)或者自定義表達式。

writeMode

數(shù)據(jù)寫入表格存儲的模式,目前支持以下兩種模式:

  • PutRow:對應(yīng)于Tablestore API PutRow,插入數(shù)據(jù)到指定的行。如果該行不存在,則新增一行。如果該行存在,則覆蓋原有行。

  • UpdateRow:對應(yīng)于Tablestore API UpdateRow,更新指定行的數(shù)據(jù)。如果該行不存在,則新增一行。如果該行存在,則根據(jù)請求的內(nèi)容在這一行中新增、修改或者刪除指定列的值。

enableAutoIncrement

是否允許向包含主鍵自增列的Tablestore表中寫入數(shù)據(jù)。

  • true:插件會自動掃描目的端表的自增列信息,并在寫入數(shù)據(jù)時添加自增列(不需要用戶配置自增列名稱)。

  • false:寫入含主鍵自增列的表時會報錯。

false

requestTotalSizeLimitation

該配置限制寫入Tablestore時單行數(shù)據(jù)的大小,配置類型為數(shù)字。

1MB

attributeColumnSizeLimitation

該配置限制寫入Tablestore時單個屬性列的大小,配置類型為數(shù)字。

2MB

primaryKeyColumnSizeLimitation

該配置限制寫入Tablestore時單個主鍵列的大小,配置類型為數(shù)字。

1KB

attributeColumnMaxCount

該配置限制寫入Tablestore時屬性列的個數(shù),配置類型為數(shù)字。

1,024

行模式寫時序表參數(shù)

參數(shù)

描述

是否必選

默認值

column

column中的每個元素對應(yīng)時序數(shù)據(jù)中的一個字段,每個元素可配置以下參數(shù)。

  • name:列名,必需配置。以下為預(yù)定義的字段:

    • 時間線的'度量名稱'使用_m_name標識,數(shù)據(jù)類型為String。

    • 時間線的'數(shù)據(jù)源'使用_data_source標識,數(shù)據(jù)類型為String。

    • 時間線的'標簽'使用_tags標識,數(shù)據(jù)類型為String,字符串格式為["tagKey1=value1","tagKey2=value2"]。

    • 時間線的'時間戳'使用_time標識,數(shù)據(jù)類型為Long,默認單位為微秒。

  • is_timeseries_tag : 是否為tags字段內(nèi)部的鍵值,非必需配置,默認為false。

  • type : 字段值類型,非必需配置,默認為string。支持string、int、double、bool、binary類型。

由于時序數(shù)據(jù)的度量名稱與時間戳不能為空,因此必須配置_m_name_time字段。

示例:一條待寫入數(shù)據(jù)如下,包含六個字段:

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",
      }
    ],

寫入Tablestore后,控制臺查看結(jié)果如下結(jié)果

timeunit

所配置的時間戳_time字段的單位,支持NANOSECONDSMICROSECONDSMILLISECONDSSECONDSMINUTES

MICROSECONDS

列模式寫寬表參數(shù)

參數(shù)

描述

是否必選

默認值

primaryKey

表的主鍵列。

考慮到配置成本,并不需要配置primaryKey在Record(Line)中的位置,但Record的格式需要固定,要求primaryKey一定在行首,primaryKey之后是columnName。record的格式為:{pk0,pk1...}, {columnName}, {timestamp}, {value}

例如,有以下9條數(shù)據(jù):

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"
    ],

寫入寬行結(jié)果:

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導(dǎo)入的數(shù)據(jù),cfqulifier共同組成了columnName,但Tablestore不支持cf,所以需要將cf過濾掉。

配置示例:"columnNamePrefixFilter":"cf:"

說明
  • 該參數(shù)選填,如果沒有填寫或者值為空字符串,表示不對列名進行過濾。

  • 如果通過數(shù)據(jù)集成添加的數(shù)據(jù)columnName列不是以前綴開始,則將該Record放入臟數(shù)據(jù)回收器中。

常見問題

問題一

Q:向包含主鍵自增列的目標表寫入數(shù)據(jù),需要如何配置Tablestore Writer?

  1. Tablestore Writer的配置中必須包含以下兩條:

    "newVersion": "true",
    "enableAutoIncrement": "true",
  2. Tablestore Writer中不需要配置主鍵自增列的列名。

  3. Tablestore Writer中配置的primaryKey條數(shù)+column條數(shù)需要等于上游Tablestore Reader數(shù)據(jù)的列數(shù)。

問題二

Q:在時序模型的配置中,如何理解_tagis_timeseries_tag兩個字段?

示例:某條數(shù)據(jù)共有三個標簽,標簽為:【手機=小米,內(nèi)存=8G,鏡頭=萊卡】。數(shù)據(jù)

  • 數(shù)據(jù)導(dǎo)出示例(Tablestore Reader)

    • 如果想將上述標簽合并到一起作為一列導(dǎo)出,則配置為:

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

      DataWorks會將標簽導(dǎo)出為一列數(shù)據(jù),形式如下:

      ["phone=xiaomi","camera=LEICA","RAM=8G"]
    • 如果希望導(dǎo)出phone標簽和camera標簽,并且每個標簽單獨作為一列導(dǎo)出,則配置為:

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

      DataWorks會導(dǎo)出兩列數(shù)據(jù),形式如下:

      xiaomi, LEICA
  • 數(shù)據(jù)導(dǎo)入示例(Tablestore Writer)

    現(xiàn)在上游數(shù)據(jù)源(Reader)有兩列數(shù)據(jù):

    • 一列數(shù)據(jù)為:["phone=xiaomi","camera=LEICA","RAM=8G"]

    • 另一列數(shù)據(jù)為:6499。

    現(xiàn)希望將這兩列數(shù)據(jù)都添加到標簽里面,預(yù)期的寫入后標簽字段格式如下所示:格式則配置為:

    "column": [
          {
            "name": "_tags",
          },
          {
            "name": "price",
            "is_timeseries_tag":"true",
          },
        ],
    • 第一列配置將["phone=xiaomi","camera=LEICA","RAM=8G"]整體導(dǎo)入標簽字段。

    • 第二列配置將price=6499單獨導(dǎo)入標簽字段。