mysql impala_Mysql实时同步Impala

本文将使用StreamSets实时同步Mysql数据到Impala

1.创建Mysql数据表

CREATE TABLE IF NOT EXISTS `test.mysqltest`(

`id` INT UNSIGNED AUTO_INCREMENT,

`name` VARCHAR(100) NOT NULL,

`age` INT NOT NULL,

PRIMARY KEY ( `id` )

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.1 开启Mysql行级日志.并创建maxwell账户(略过)

2.2 Impala创建对应数据表

CREATE TABLE IF NOT EXISTS `mysqltest`(

`id` INT ,

`name` string ,

`age` INT ,

PRIMARY KEY ( `id` )

)

PARTITION BY HASH (`id`)

PARTITIONS 16 STORED AS KUDU

TBLPROPERTIES ('kudu.table_name'='test.mysqltest')

3.配置StreamSets流.

3.1 Mysql数据源配置

19e1a0c80356

image.png

19e1a0c80356

image.png

3.2 过滤数据库

19e1a0c80356

image.png

3.3 格式化数据

19e1a0c80356

image.png

代码如下:

for record in records:

newRecord = sdcFunctions.createRecord(record.sourceId + ':newRecordId')

try:

if record.value['Type'] == 'DELETE':

newRecord.attributes['sdc.operation.type']='2'

newRecord.value = record.value['OldData']

else:

newRecord.attributes['sdc.operation.type']='4';

newRecord.value = record.value['Data'];

# Write record to processor output

#newRecord.value['Type'] = record.value['Type']

newRecord.value['Table'] = record.value['Table']

output.write(newRecord)

except Exception as e:

# Send record to error

error.write(newRecord, str(e))

3.4 Mysql字段转小写

19e1a0c80356

image.png

代码如下

for record in records:

try:

for key in record.value.keys():

record.value[key.lower()] = record.value[key]

#del record.value[key]

output.write(record)

except Exception as e:

# Send record to error

error.write(record, str(e))

3.5 时间格式转换

19e1a0c80356

image.png

3.6 Kudu写入配置

19e1a0c80356

image.png

4.最终效果图(该效果图为生产环境效果):

19e1a0c80356

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值