kettle-数据同步比较数据(删除更新)

时间:2024-04-07 16:42:34

需求是这样的:
从A数据库取数据到B数据库,A库中表只包含有效数据,因此同步到B库中也只能包含有效数据,其他的数据要么更新,要么删除,或者新增。

总体解决方案:
kettle-数据同步比较数据(删除更新)
因为脚本是第三方执行的,我们没有权限执行脚本,同样也没有第三方也就是上面说的A库的权限,因此我们一开始一直纠结怎么取数据,把解决问题的点一直关注B库,后来才反应过来,既然是第三方执行脚本,他们有A库权限,那么执行脚本应该把A库算在可执行解决问题的范围内,不应该只是将其作为一个简单的表输入使用。

具体解决方案:

  • 首先将库A、B的表作为表输入
  • 然后“字段选择”是选择输出的字段(不输出不写),并且可以重新命名(这个功能很好,可以将不同表数据命名统一),进行排序
  • 然后合并记录(合并记录之前必须排序,合并记录其实就是根据主键判断两表对应数据是否一致,合并记录后会形成标志位,用于判断数据是更新、删除还是新增,不变)
  • 然后根据标志位使用switch/case对数据进行状态判断
  • 根据标志位状态进行删除、插入更新。

表输入:
kettle-数据同步比较数据(删除更新)
字段选择:
选择需要输出的字段,并且可以重新命名字段
kettle-数据同步比较数据(删除更新)
排序记录:
输入需要排序的字段,一般和主键保持一致
kettle-数据同步比较数据(删除更新)
合并记录:
用于比较A库和B库对应表的数据,根据主键(关键字段)确立数据匹配规则,并标记数据状态(标志字段:flagfield
数据状态:

  1. “identical” – 旧数据和新数据一样

  2. “changed” – 数据发生了变化;

  3. “new” – 新数据中有而旧数据中没有的记录

  4. “deleted” –旧数据中有而新数据中没有的记录
    kettle-数据同步比较数据(删除更新)
    判断数据状态:
    根据数据最终标记状态(flagfield),选择输出的目标步骤
    kettle-数据同步比较数据(删除更新)
    删除:
    根据主键(关键字)删除对应标志位数据
    kettle-数据同步比较数据(删除更新)
    插入、更新:
    根据主键(关键字段),进行插入更新数据
    kettle-数据同步比较数据(删除更新)