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

时间:2025-03-24 07:46:38

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. /weixin_39905226/article/details/111849083
2. /qq_33375499/article/details/110952921
3. /yuezc/p/
4. /weixin_40479337/article/details/106060594
5. /kjxy/articles/
6. /m0_37618809/article/details/81015492    该文献评论亮了
kettle问题解决:
wget ftp:///mirror//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 搞定,收工

相关文章