需求是这样的:
从A数据库取数据到B数据库,A库中表只包含有效数据,因此同步到B库中也只能包含有效数据,其他的数据要么更新,要么删除,或者新增。
总体解决方案:
因为脚本是第三方执行的,我们没有权限执行脚本,同样也没有第三方也就是上面说的A库的权限,因此我们一开始一直纠结怎么取数据,把解决问题的点一直关注B库,后来才反应过来,既然是第三方执行脚本,他们有A库权限,那么执行脚本应该把A库算在可执行解决问题的范围内,不应该只是将其作为一个简单的表输入使用。
具体解决方案:
- 首先将库A、B的表作为表输入
- 然后“字段选择”是选择输出的字段(不输出不写),并且可以重新命名(这个功能很好,可以将不同表数据命名统一),进行排序
- 然后合并记录(合并记录之前必须排序,合并记录其实就是根据主键判断两表对应数据是否一致,合并记录后会形成标志位,用于判断数据是更新、删除还是新增,不变)
- 然后根据标志位使用switch/case对数据进行状态判断
- 根据标志位状态进行删除、插入更新。
表输入:
字段选择:
选择需要输出的字段,并且可以重新命名字段
排序记录:
输入需要排序的字段,一般和主键保持一致
合并记录:
用于比较A库和B库对应表的数据,根据主键(关键字段)确立数据匹配规则,并标记数据状态(标志字段:flagfield)
数据状态:
-
“identical” – 旧数据和新数据一样
-
“changed” – 数据发生了变化;
-
“new” – 新数据中有而旧数据中没有的记录
-
“deleted” –旧数据中有而新数据中没有的记录
判断数据状态:
根据数据最终标记状态(flagfield),选择输出的目标步骤
删除:
根据主键(关键字)删除对应标志位数据
插入、更新:
根据主键(关键字段),进行插入更新数据