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为空,默认根据方法一自动切分:
  • 方法一:根据splitKey找到最大值和最小值,然后按照指定的concurrent数平均切分。
    说明 仅支持以整型和字符串类型作为切分列。
  • 方式二:根据设置的splitPoint进行切分。然后按照指定的concurrent同步数据。
splitPoints 根据切分列的最大值和最小值切分时不能保证避免数据热点,因此,建议切分点根据Regionstartkeyendkey进行设置,保证每个查询对应单个Region。
where 筛选条件,支持对表查询增加过滤条件。HBase20xsql Reader根据指定的columntablewhere条件拼接SQL,并根据该SQL进行数据抽取。
querySql 在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置型来自定义筛选SQL。配置该项后,除queryserverAddress参数必须设置外,HBase20xsql Reader会直接忽略columntablewheresplitKey条件的配置,使用该项配置的内容对数据进行筛选。

脚本开发介绍

脚本配置示例如下,使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务
{
    "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"
            }
        ]
    }
}