用ETL工具做数据库增量同步方式总共有如下几种:
- 通过时间戳实时增量同步,每次读取数据时用上一次读的时间戳进行最新数据的查询,有缺点也有优点,这种方式增量我们后面再介绍用ETL怎么做
- 使用触发器实现增量数据同步,这种需要修改源系统的数据库表一般不推荐,也不允许
- 使用CDC数据库log日志方式,这种方式在很多传统企业也不允许开数据库log且有些数据库不支持,这种我们后面再介绍用ETL怎么做
- 很多kettle的用户喜欢用全部删除目标表再重新批量插入一次的方式,这种方式速度也很快缺点是在传输过程中目标表中的数据是空的,对业务会有一点的影响
- RestCloud ETL这次主要介绍数据库表没有没有时间戳、也不允许开数据库归档日志或者数据来源于API,API中的流数据与表数据做增量的同步场景,这种场景主要依赖于数据库表的全表对比来做,不需要目标表全部删除,不对业务产生任何影响。
增量同步方案
mysql里面有一张客户表没有时间戳需要增量同步到sql server的客户表中,每5分钟同步一次,同时对于增量同步后的数据要打上标签U表示更新过,I表示插入的,同时增加更新的时间字段。
(MySql客户表数据1000条)
(SqlServer表数据1000条)
首先进入RestCloud ETL平台创建一个增量同步的任务,进入任务设计界面后分别拖入源表、分批增量运算节点、目标表三个节点如下图:
(上面只需要三个节点即可完成增量同步)
RestCloud ETL相比于其他ETL工具的最大好处就是专门有针对这种增量运算的组件,非常方便直接拖在源表和目标表之间就可以实现源表和目表示的增量同步。
(源表节点我们选择mysql的客户表)
(目标表选择sql server的客户表)
(在增量节点中选中两张表需要进行对比的字段)
这样增量同步任务就完成了,过程只需要几分钟,基本上业务人员培训一下都可以实现,现在试跑一下增量流程是否可以同步数据。
第一次跑可以看到数据增量传送为0表示两个表的数据是一样的没有增量数据,我们现在去mysql中改几条记录。
在mysql中把三个客户的电话号码给改了,同时删除掉第4条孙珠这个客户的数据,看看是否能准确增量到目标表中。
运行后可以看到ETL任务很准确的流出了4条增量数据,3条更新,1条删除
查看sql server目标表已发现3条被更新,其中第uuid=5的数据已被同步删除。
如果要做到更新过去后目标表要带上更新时间和CRUD标识,则还需要再增加一个映射字段节点,把系统给增量数据打上的CRUD标签映射到目表示中即可,需要增加一个节点如下:
增加一个映射节点
配置CRUD标签写入到目标表中
上述流程测试没有问题后即可以安排一个定时任务如每5分钟执行一次,这样就可以把客户数据增量同步到目标数据库中,如果要准实时就安排每分钟执行一次即可。
(设置一个定时任务,每5分钟增量同步一次)
更多信息可以去RestCloud ETL网站了解和下载ETL工具 https://etl.restcloud.cn