HBase20xsql Reader插件实现了从Phoenix(Hbase中的SQL表)中读取数据,本文为您介绍HBase20xsql Reader支持的数据类型、参数说明及配置示例。
前提条件
配置HBase20xsql Reader插件前,请确认数据源已配置完成,详情请参见:配置HBase数据源。
实现原理
HBase20xsql Reader插件通过Phoenix轻客户端连接Phoenix的查询服务器(QueryServer),并根据用户配置信息生成SQL查询语句,然后发送至QueryServer读取HBase数据源中的数据,完成后将返回结果按照DataX自定义的数据类型拼装为抽象的数据集,最终传递给下游Writer处理。
使用限制
- 仅支持HBase2.x和Phoenix5.x版本。
- 切分表时仅支持对单个列进行切分,且该列必须是表主键。
- 按照作业的并发个数平均切分表时,仅支持以整型和字符串类型作为切分列。
- 表名、schema名及列名大小写敏感,需要与Phoenix表实际大小写保持一致。
- 仅支持通过Phoenix QueryServer读取数据,因此您的Phoenix必须启动QueryServer服务才能使用HBase20xsql Reader插件。
类型转换
HBase20xsql Reader支持大部分Phoenix类型,但也存在个别类型没有支持的情况,请注意检查你的类型。
HBase20xsql Reader针对Phoenix类型的转换列表,如下所示。
DataX内部类型 | Phoenix数据类型 |
---|---|
long | INTEGER、TINYINT、SMALLINT、BIGINT |
double | FLOAT、DECIMAL、DOUBLE |
string | CHAR、VARCHAR |
date | DATE、TIME、TIMESTAMP |
bytes | BINARY、VARBINARY |
boolean | BOOLEAN |
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
queryServerAddress | HBase20xsql Reader插件需要通过Phoenix轻客户端去连接Phoenix QueryServer,因此,您需要在此处填写对应的QueryServer地址。如果HBase增强版(Lindorm)用户需要透传user、password参数,可以在queryServerAddress后增加对应的可选属性。格式为:http://127.0.0.1:8765;user=root;password=root 。
|
是 | 无 |
serialization | QueryServer使用的序列化协议。 | 否 | PROTOBUF |
table | 所要读取的表名(大小写敏感)。 | 是 | 无 |
schema | 表所在的schema。 | 否 | 无 |
column | 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息,空值表示读取所有列。默认值为空值。 | 否 | 全部列 |
splitKey | 读取表时对表进行切分,如果指定splitKey,表示您希望使用splitKey代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高了数据同步的效能。您可以选择两种不同的切分方式,如果splitPoint为空,默认根据方法一自动切分:
|
是 | 无 |
splitPoints | 根据切分列的最大值和最小值切分时不能保证避免数据热点,因此,建议切分点根据Region的startkey和endkey进行设置,保证每个查询对应单个Region。 | 否 | 无 |
where | 筛选条件,支持对表查询增加过滤条件。HBase20xsql Reader根据指定的column、table、where条件拼接SQL,并根据该SQL进行数据抽取。 | 否 | 无 |
querySql | 在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置型来自定义筛选SQL。配置该项后,除queryserverAddress参数必须设置外,HBase20xsql Reader会直接忽略column、table、where和splitKey条件的配置,使用该项配置的内容对数据进行筛选。 | 否 | 无 |
脚本开发介绍
脚本配置示例如下,使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务。
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"hbase20xsql",//插件名。
"parameter":{
"queryServerAddress": "http://127.0.0.1:8765", //填写连接Phoenix QueryServer地址。
"serialization": "PROTOBUF", //QueryServer序列化格式。
"table": "TEST", //读取表名。
"column": ["ID", "NAME"], //所要读取列名。
"splitKey": "ID" //切分列,必须是表主键。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//错误记录数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1,//作业并发数。
"mbps":"12"//限流。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}