使用Kettle实现数据实时增量同步

1. 步骤以及思路:

通过中间表记录每次更新的时间戳,在下一个同步周期时,通过这个时间戳同步该时间戳以后的增量数据。这是时间戳增量同步。
源数据表:
CREATE TABLE `im_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sender` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '消息发送者:SYSTEM',
  `send_time` datetime(6) NOT NULL,
  `receiver` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '消息接受者',
  `content` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '消息内容',
  `is_read` tinyint(4) NOT NULL COMMENT '消息是否被读取:0-未读;非0-已读',
  `read_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='消息表'


作业流程
1. 开始组件
2. 建时间戳中间表
3. 获取中间表的时间戳,并设置为全局变量
4. 删除目标表中时间戳及时间戳以后的数据
5. 抽取两个数据表的时间戳及时间戳以后的数据进行比对,并根据比对结果进行删除、新增或修改操作
6. 更新时间戳


创建作业和DB连接


4.1 建时间戳中间表

CREATE TABLE IF NOT EXISTS etl_temp(id int primary key,time_stamp timestamp);
INSERT IGNORE INTO etl_temp (id,time_stamp) VALUES (1,'2018-05-22 00:00:00');

4.2 获取时间戳并设为变量

select date_format(time_stamp , '%Y-%m-%d %H:%i:%s') time_stamp from etl_temp where id='1'

4.3 删除目标表中时间戳及时间戳以后的数据

delete from im_message where send_time>='${TIME_STAMP}'


4.4 抽取、比对和更新数据

原始表输入:

SELECT
  id
, sender
, send_time
, receiver
, content
, is_read
, read_time
FROM im_message
where send_time>= date_sub(str_to_date('${TIME_STAMP}','%Y-%m-%d %H:%i:%s'), interval ${ROLL_BACK_DAYS} day);

目标表输入

SELECT
  id
, sender
, send_time
, receiver
, content
, is_read
, read_time
FROM im_message
where send_time>= date_sub(str_to_date('${TIME_STAMP}','%Y-%m-%d %H:%i:%s'), interval ${ROLL_BACK_DAYS} day);

比对记录



4.5 更新时间戳

set @new_etl_start_time_stamp = (SELECT SEND_TIME FROM im_message ORDER BY SEND_TIME DESC LIMIT 1);
update etl_temp set time_stamp=@new_etl_start_time_stamp where id='1';


新数据源  原始表   database0  im_message
旧数据源  目标表   database1  im_message  etl_temp

INSERT INTO `im_message` VALUES (201,'wuzhan','2018-05-25 03:52:47.201000','wenbo','用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据用户kettle的测试数据',0,NULL)

2. 参考文档:

使用Kettle实现数据实时增量同步

3. linux下kettle定时任务配置
1. https://blog.csdn.net/weixin_39905226/article/details/111849083
2. https://blog.csdn.net/qq_33375499/article/details/110952921
3. https://www.cnblogs.com/yuezc/p/12101089.html
4. https://blog.csdn.net/weixin_40479337/article/details/106060594
5. https://www.cnblogs.com/kjxy/articles/13607844.html
6. https://blog.csdn.net/m0_37618809/article/details/81015492    该文献评论亮了
kettle问题解决:
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpm 
然后 yum install webkitgtk-2.4.9-1.el7.x86_64.rpm 搞定,收工

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值