目录
一、主体思路:
1、基础要求:
需要同步的源表中要有主键ID、时间戳这两个字段。并且源表中新插入数据时时间戳字段值为当前系统时间,源表中数据有修改同样要修改时间戳的字段值为当前系统时间。只有在这个基础上,才可以通过以下思路实现单表数据的增量同步并记录增量同步数据量。
2、具体思路如下:
手动全量同步:第一次需要手动全量同步数据,并在一张数据量统计表中将第一次同步数据量进行记录。数据量统计表中所需要的核心字段有:数据名称(或者数据编码)、数据量、数据统计时间段开始、数据统计时间段结束等字段,可以根据需要自己再增加资源。第一次手动在数据统计表中添加记录,主要是数据统计时间段结束时间大概为全量同步完成的那个时间。
自动增量同步:
(1)获取查询开始时间:kettle作业先根据数据量统计表,读取该数据种类最近一次同步记录获取最近一次统计时间段结束时间,该时间作为本次统计的开始时间;
(2)获取查询结束时间:然后在kettle中获取当前系统时间作为本次统计的结束时间;
(3)通过比对更新数据:然后通过表输入以及数据左连比对获取源表数据中哪些主键ID在目标表中是存在的,然后逐个判断可能会发生变化的字段,如果该字段值在源表与目标表中值不相等,那么就更新该字段值;
(4)然后通过表输入以及数据左连比对获取哪些源表数据中哪些主键ID在目标表中是不存在的,那么就插入这些数据;
(5)最后通过统计源表中在本次统计时间段开始时间、统计时间段结束时间内的数据量记录在数据量统计表中。
说明:最好是先更新数据,然后再插入数据。这样可以减少kettle一些不必要的数据工作量。因为先更新数据,目标表中需要判断字段值是否发生变化的数据量相对比较少些。
二、具体kettle设计作业操作:
1、主作业:
主作业也就是kettle启动的作业。主要是配置整个功能中kettle的数据流程。大致流程如下:
2、获取查询开始时间:
就是在一个转换中,通过“表输入”组件,写sql查询出最近一次该表数据同步的数据量统计,然后将该表中的统计时间段结束时间设置为变量,并且变量作用范围为当前父作业。以便后续转换使用。
3、创建查询结束时间:
就是在一个转换中,通过“输入-->获取系统信息”组件,获取当前系统时间,并设置为变量,变量作业方位为当前父作业。以便后续转换使用。
4、通过比对更新数据:
就是在一个转换中,通过表输入将源表、目标表中的数据拿到,然后对关联字段进行排序,然后通过过滤记录组件判断目标表主键ID是否为空,如果为空就标识需要插入数据,在更新转换中不做任何工作;如果不为空,那么就将数据再进行排序,然后将数据复制发送给若干个过滤记录组件(一定注意是复制,不是分发),该组件就是判断指定的字段在源表、目标表中值是否相等,如果不相等就更新该值。(此方式自创更新方式,更新效率高)
5、通过比对插入数据:
就是在一个转换中,通过表输入将源表、目标表中的数据拿到,然后对关联字段进行排序,然后通过过滤记录组件判断目标表主键ID是否为空,如果为空就标识需要插入数据;如果不为空,在插入转换中不做任何工作。
6、统计同步数据量:
就是在一个转换中,通过在表输入中写SQL语句,并指定查询时间范围,查询开始时间、查询结束时间通过变量获取,统计出源表中的数据量,然后在数据量统计表中插入一条新记录。记录下本次增量同步数据量。同时以便下次增量作业执行获取最近上一次增量同步结束时间作为增量作业执行时的查询时间段开始时间。