OTSReader自己定义切分主键

  1. 云栖社区>
  2. 阿里云DataWorks>
  3. 博客>
  4. 正文

OTSReader自己定义切分主键

dataworks@李珍珍 2019-04-04 14:32:34 浏览8036

该配置项属于高级配置项,是用户自己定义切分配置信息,普通情况下不建议用户使用。

适用场景通常在OTS数据存储发生热点,使用OTSReader自动切分的策略不能生效情况下,使用用户自定义的切分规则。split指定是的在Begin、End区间内的切分点,且只能是partitionKey的切分点信息,即在split仅配置partitionKey,而不需要指定全部的PrimaryKey。
例如对一张主键为id01、id02的OTS进行抽取任务,主键是数据0~90可以配置为:

{
"job": {
       "setting": {
           "speed": {
               "byte": 1048576
           },
           "errorLimit": {
               "record": 0,
               "percentage": 0.02
           }
       },
       "content": [
           {
               "reader": {
                   "name": "otsreader-internal",
                   "parameter": {
                       "mode": "multiVersion",
                       "endpoint": "http://datax-internal.cn-hangzhou.ots.aliyuncs.com/",
                       "accessId": "xxxxxxxxxxxxxxxx",
                       "accessKey": "yyyyyyyyyyyyyy",
                       "instanceName": "datax-internal",
                       "table": "datax_ots_reader_internal_test_table",
                       "range": {
                           "begin": [
                               {
                                   "type": "INF_MIN",//主键id01最小值
                                   "value": ""
                               },
                               {
                                   "type": "INF_MIN",//主键id02最小值
                                   "value": ""
                               }
                           ],
                           "end": [
                               {
                                   "type": "INF_MAX",//指定 id01 抽取最大值
                                   "value": ""
                               },
                               {
                                   "type": "INF_MIN",//指定 id02 抽取最大值
                                   "value": ""
                               }
                           ],
                           "split": [
            // 用户指定的切分点,如果指定了切分点,Job 将按照 begin、end 和 split 进行 Task 的切分,
           // 切分的列只能是 Partition Key(ParimaryKey 的第一列)
           // 支持 INF_MIN, INF_MAX, STRING, INT
           
                               {
                                   "type": "int",
                                   "value": "30"
                               },
                               {
                                   "type": "int",
                                   "value": "60"
                               },
                               {
                                   "type": "int",
                                   "value": "90"
                               }
                           ]
                       },
                       "column": [
                           {
                               "name": "name"
                           },
                           {
                               "name": "mobile"
                           },
                           {
                               "name": "age"
                           },
                           {
                               "name": "salary"
                           },
                           {
                               "name": "marry"
                           }
                       ]
                   }
               },
               "writer": {
                   "name": "txtfilewriter",
                   "parameter": {}
               }
           }
       ]
   }
}