1、教程初衷,最近想要使用kettle实现单表增量同步,在各种搜索中,实现成功后,很是感激,也想通过教程复述的方式记录方法的实现过程、理清思路,好了好了,废话多多少少有点多了。
2、介绍具体环境
想要将input_test表中数据实时同步到output_test表中,小编的这两个表在mysql的同一个数据库中,当然在mysql的不同数据库也可以实现。
3、实现思路
(1)获取上一次同步时间。
(2)同步本次更新数据。
(3)记录本次同步时间。
4、使用工具kettle和navicat premium15,需要安装好Java。小编都放到这里啦。
navicat premium15链接:https://pan.baidu.com/s/1mPRnVLaZTph4UM4r8oVHtg
提取码:guan
Java安装程序链接:https://pan.baidu.com/s/157WdYbHnn0jPQbDY88jf0w
提取码:guan
kettle及mysql连接的jar包(把jar包放在lib文件夹下,重启kettle就可以生效)
链接:https://pan.baidu.com/s/1EydEaM1apeqrc53Y6KrByA
提取码:guan
4、实际操作步骤
步骤一:
提到上一次同步时间,我们需要创建一个日志表(rz)来记录每次的同步信息,表字段包括同步id,同步人,同步结果,同步时间,也需要input_test和output_test中都存在一列更新时间(将更新时间与同步时间作比较来判断是否为增量数据)
小编使用navicat premium15,来实现创建日志表和插入更新时间列操作。
日志表,表名:rz , 结构如下:
并且添加了一行数据
input_test和out_test表结构一致,添加了gxsj列。
input_test表里插入几条数据,最后两条的更新时间是在同步时间之后的。output_test表内现在暂无数据。
把添加的gxsj列设为系统时间。
update input_test set gxsj=SYSDATE()
update output_test set gxsj=SYSDATE()
步骤二:使用kettle新建转换,命名为:1-获取上一次同步时间
添加步骤 表输入
编辑表输入->输入sql语句,
SELECT IFNULL(max(tbsj),SYSDATE()-INTERVAL 1 DAY) from rz