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 搞定,收工