现有两个用户orcalA与orcalB,需求是B用户下的所有表数据与操作要同步到A表中对应的表中,比如B用户下的user表新增一条数据,A用户下的user表就需要同步新增数据,如果B更新、删除了数据,A用户下对应的表中需记录更新的数据以及删除的数据
先看整体流程:
思路是A用户下的user表与B用户下的user表的所有数据查出来,先根据主键排序,排完序之后合并,合并的时候kettle会自动比较那些是新增、更新、删除的数据,并且会生成一个字符串标志带入下一步,switch/case时就是根据kettle给的标志,把新增、更新、删除的数据对应的去处理,获取系统信息时因为需要记录当前数据变更的时间,最后去需要同步的库里变更数据。
第一步:源数据表(JX)与目标表(ETL)全查询
第二步:根据主键排序(两个排序没什么区别,这里就只放一个图)
第三步:合并两个表的数据(这里合并比较数据的时候需要注意,如果数据最后插入很多或者更新跟多的时候,可能是这里出现问题,仔细核查一下字段)
第四步:根据flagfiled不同的值,拿到不同的数据,送到不同的操作中,目标步骤就是下一步的操作
第五步:因为需要记录数据是新增、更新、删除那种状态,所以需要选择字段,把flagfiled获取到(更新、插入、删除都是获取同样的字段)
第六步:获取当前系统时间,记录下更新本条数据的时间(字段名称自定义)
第七步:更新数据(id相同时,更新所有字段,给p_flag赋上flagfield的值,给P_change_time赋上获取的系统时间,这里id是否更新Y/N似乎没什么区别,测试了几次好像没什么影响,一般也不会去改主键,主键修改了就会认定为新增)
---flag是目标库的标记数据动作的字段,changetime是目标库记录数据变更时间的字段
第八步:插入新增数据(与更新一样,flag与changetime赋值正确就行)
第九步:更新删除字段(记录表的删除只是改变flag字段,并不删除数据,所以只需要更新flag与changetime即可)