一、模板
从 mysql 到 phoenix,调用的hbase11xsqlwriter
fact_user_role.json
{
"job": {
"entry": {
"jvm": "-Xms2048m -Xmx2048m"
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "bdquery",
"password": "*******",
"connection": [
{
"querySql": [
"select t_user_school_rel.id id,t_user_school_rel.user_id user_id,t_user_school_rel.school_id school_id,t_user_school_rel.role_type role_type,t_user_school_rel.sno sno,t_user_school_rel.create_time create_time from t_user_school_rel where create_time>'${lastTime}' and create_time<='${nowTime}';"
],
"jdbcUrl": [
"jdbc:mysql://119.23.249.2:16044/testcore"
]
}
]
}
},
"writer": {
"name": "hbase11xsqlwriter",
"parameter": {
"batchSize": "256",
"column": [
"ID",
"USERID",
"SCHOOLID",
"ROLETYPE",
"SNO",
"CREATETIME"
],
"hbaseConfig": {
"hbase.zookeeper.quorum": "192.168.2.15",
"zookeeper.znode.parent": "/hbase"
},
"nullMode": "skip",
"table": "LOG_ANA:ROLE"
}
}
}
],
"setting": {
"speed": {
"channel": 5
}
}
}
}
二.编写注意事项
1、参照模板,编写reader内容,修改内容如下
编写writer内容,修改内容如下:
注意:
1、脚本的读取数据类型的顺序一定要和输出列的顺序保持一致,否则容易产生脏数据
2、读取列数据类型中 int 和 float 可能会导致脏数据,适当的使用 long 和 double类型替换
3、通常 hbase.phoenix 中的表名和列名都是大写,脚本中相对应的要注意大小写
脏数据的产生原因会有很多
4 输出到 hbase.phoenix表需要加上数据库,连接用 : eg: LOG_ANA:FLOW
5 写入的数据类型的顺序要和输出列相对应
三.命名规则
Eg:xxx_sss_fff.json
Xxx 表示系统名称,sss 表示数据库名称,fff 表示目标表名称
Json 脚本的名称需要和数据库表和输出表的名称相对应。
四.示例
{
"job": {
"entry": {
"jvm": "-Xms2048m -Xmx2048m"
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "bdquery",
"password": "*******",
"connection": [
{
"querySql": [
"select t_user_school_rel.id id,t_user_school_rel.user_id user_id,t_user_school_rel.school_id school_id,t_user_school_rel.role_type role_type,t_user_school_rel.sno sno,t_user_school_rel.create_time create_time from t_user_school_rel where (create_time>${begindate} and create_time<=${enddate}) or (modfied_time>${begindate} and modfied_time<=${enddate});"
--指定一个或多个时间类型字段,利用系统的两个变量(${begindate},${enddate})完成增量同步
],
"jdbcUrl": [
"jdbc:mysql://119.23.249.27:16044/testcore"
]
}
]
}
},
"writer": {
"name": "hbase11xsqlwriter",
"parameter": {
"batchSize": "256",
"column": [
"ID",
"USERID",
"SCHOOLID",
"ROLETYPE",
"SNO",
"CREATETIME",
],
"hbaseConfig": {
"hbase.zookeeper.quorum": "目标hbase集群的ZK服务器地址",
--描述:hbase集群地址,zk为必填项,格式:ip1,ip2,ip3, -
--注意,多个IP之间使用英文的逗号分隔。
"zookeeper.znode.parent": "目标hbase集群的znode"
--znode是可选的,默认是 /hbase
},
"nullMode": "skip",
--读取到的列值为null时,如何处理。目前有两种方式(默认是
skip):
--skip:跳过这一列,即不插入这一列(如果该行的这一列之前已经
存在,则会被删除) empty:插入空值,值类型的空值是0,varchar
的空值是空字符串
"table": "目标hbase表名,大小注意区分"
--大小写敏感,通常phoenix表都是大写表名
}
}
}
],
"setting": {
"speed": {
"channel": 5
}
}
}
}