本文为您介绍OTS Reader支持的数据类型、读取方式、字段映射和数据源等参数及配置示例。
OTS Reader插件实现了从Table Store(OTS)读取数据,通过您指定的抽取数据范围,可以方便地实现数据增量抽取的需求。目前支持以下三种抽取方式:
- 全表抽取
- 范围抽取
- 指定分片抽取
Table Store是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问。Table Store以实例和表的形式组织数据,通过数据分片和负载均衡技术,实现规模上的无缝扩展。
OTS Reader通过Table Store官方Java SDK连接到Table Store服务端,获取并按照数据同步官方协议标准转为数据同步字段信息传递给下游Writer端。
OTS Reader会根据Table Store的表范围,按照数据同步并发的数目N,将范围等分为N份Task。每个Task都会有一个OTS Reader线程来执行。
目前OTS Reader支持所有Table Store类型,OTS Reader针对Table Store的类型转换表,如下所示。
类型分类 | Table Store数据类型 |
---|---|
整数类 | INTEGER |
浮点类 | DOUBLE |
字符串类 | STRING |
布尔型 | BOOLEAN |
二进制类 | BINARY |
说明 Table Store本身不支持日期型类型。应用层通常使用Long保存时间的Unix TimeStamp。
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
endpoint | OTS Server的EndPoint(服务地址),详情请参见服务地址。 | 是 | 无 |
accessId | Table Store的AccessKey ID。 | 是 | 无 |
accessKey | Table Store的AccessKey Secret。 | 是 | 无 |
instanceName | Table Store的实例名称,实例是您使用和管理Table Store服务的实体。 您在开通Table Store服务后,需要通过管理控制台来创建实例,然后在实例内进行表的创建和管理。 实例是Table Store资源管理的基础单元,Table Store对应用程序的访问控制和资源计量都在实例级别完成。 | 是 | 无 |
table | 所选取的需要抽取的表名称,这里有且只能填写一张表。在Table Store不存在多表同步的需求。 | 是 | 无 |
column | 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。由于Table Store本身是NoSQL系统,在OTS Reader抽取数据过程中,必须指定相应的字段名称。
| 是 | 无 |
begin和end | begin和end配置项必须配对使用,用于表示抽取Table Store表数据的范围。 begin和end描述的是Table Store PrimaryKey的区间分布状态,并且必须保证该配置项覆盖到目标表所有类型的PrimaryKey。对于无限大小的区间,您可以使用 {"type":"INF_MIN"} 和{"type":"INF_MAX"} 分别指代begin和end,其中type表示抽取数据的类型。说明
例如,对一张主键为 [DeviceID, SellerID] 的双主键Table Store表进行数据抽取,begin和end的配置如下所示。
| 是 | 空 |
split | 该配置项属于高级配置项,是您自己定义切分配置信息,普通情况下不建议使用。 适用场景:通常在Table Store数据存储发生热点,使用OTS Reader自动切分的策略不能生效的情况下,使用您自定义的切分规则。 split指定在Begin、End区间内的切分点,且只能是partitionKey的切分点信息,即在split仅配置partitionKey,而不需要指定全部的PrimaryKey。 如果对一张主键为 [DeviceID, SellerID] 的Table Store进行抽取任务,配置如下。
| 否 | 无 |
脚本开发介绍
配置一个从Table Store同步抽取数据到本地的作业,使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务。
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"ots",//插件名。
"parameter":{
"datasource":"",//数据源。
"column":[//字段。
{
"name":"column1"//字段名。
},
{
"name":"column2"
},
{
"name":"column3"
},
{
"name":"column4"
},
{
"name":"column5"
}
],
"range":{
"split":[
{
"type":"INF_MIN"
},
{
"type":"STRING",
"value":"splitPoint1"
},
{
"type":"STRING",
"value":"splitPoint2"
},
{
"type":"STRING",
"value":"splitPoint3"
},
{
"type":"INF_MAX"
}
],
"end":[
{
"type":"INF_MAX"
},
{
"type":"INF_MAX"
},
{
"type":"STRING",
"value":"end1"
},
{
"type":"INT",
"value":"100"
}
],
"begin":[
{
"type":"INF_MIN"
},
{
"type":"INF_MIN"
},
{
"type":"STRING",
"value":"begin1"
},
{
"type":"INT",
"value":"0"
}
]
},
"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"
}
]
}
}