1. 概述
1.1 应用场景
用户希望来源表的增删改同步到目标表的同时,目标表的 update 字段能记录数据变化时间。
「数据比对」算子可以进行增删改标记,通过自动生成 fdl_comparison_type 标记列,记录标识值。但是标记值被记录在 fdl_comparison_type 字段中时,在标记删除数据时,无法同时更新目标表中的 update 字段记录数据变化时间。
1.2 实现思路
1)将来源表的增删改同步到目标表。
使用「数据比对」算子。
2)目标表的 update 字段能记录数据变化时间。
使用「新增计算列」算子,新增 update 字段,值为当次任务运行时间;使用「数据分发」算子,把标记 Added、Changed 的数据在「DB 表输出」算子中做插入更新;把标记 Removed 的数据在「DB 表输出」算子中做更新操作,以便在标记删除数据的同时,能够把数据变化时间记录在 update 字段中。如下图所示:
最后效果如下图所示:
注:如下图黄色区域所示目标表中的删除数据,除逻辑主键、update、fdl_comparison_type 字段外,其他字段值为空(下图 ID 为1005、1006 的数据)。用户根据实际需求选择是否使用本文方案。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 中定时任务:「数据比对后更新目标表时间列」
2. 示例
2.1 场景模拟
现在来源表中删除了「甘蔗」和「冻梨」的数据,增加了「葡萄」的数据,更新了「菠萝」的数据。希望将最新数据同步到目标表表中,且数据变化的时间更新到目标表的 update 字段。
2.2 目标表准备
每次数据更新,是把来源表的数据和目标表中没有删除记录的数据做比较,所以目标表中需要新增一列标记列,标记数据变化。
由于「数据比对」算子中会自动生成 fdl_comparison_type 标记列,记录标识值,所以目标表中新增一列,字段名为 fdl_comparison_type ,值为空,统一由fdl_comparison_type 记录标识值。如下图所示:
2.3 取出来源表和目标表数据
1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「DB表输入」算子,算子名称修改为「来源表」,取出来源表数据。如下图所示:
3)拖入「DB表输入」算子,算子名称修改为「目标表」,取出目标表中没有删除记录的数据。如下图所示:
注:本文示例使用的 MySQL 数据库,用户根据实际情况修改 SQL 语句。
SELECT ID,name,sales FROM `demo2`.`目标表` where fdl_comparison_type != 'Removed' OR fdl_comparison_type is Null
2.4 设置数据比对
1)添加一个「数据比对」算子,并使用线条跟它上游的两个「DB表输入」算子相连。
2)「数据比对」算子中,设置逻辑主键、比对字段即可。如下图所示:
各设置项介绍如下表所示:
设置项 | 说明 | 本文示例 |
---|---|---|
比对源 | 自动生成 | - |
逻辑主键 | 用于在两张表中识别同一条数据,即通过「逻辑主键」将来源表和目标表的数据对应起来,所以「逻辑主键」的值不建议为空或者相同 | ID |
比对字段 | 用于对比两张表中该字段的差异,基于比较结果会自动生成标记列 fdl_comparison_type ,该列可以在「DB表输出」算子的「字段映射」中删除 若某个字段被设置为比对字段:可以识别出该字段对应数据的新增、更新、删除 若某个字段没有被设置为比对字段:能识别出该字段的增加和删除,但这个字段若存在更新,将不能被识别 | 本文示例中,变化的数据列为 sales 列,所以比对字段设置为 sales |
标识关系 | 标记列 fdl_comparison_type 的值,用于标记两张表中同一个字段的差异。默认值为:Identical(相同)、Changed(更新)、Added(新增)、Removed(删除),可以自定义标识关系值 | 不做修改,默认即可 |
比对表返回字段 | 1)可选项为比对表的所有字段,一般情况下默认为空,无需设置 2)当「数据比对」算子连接的比对表算子类型为 简道云输入 时,需要设置比对表返回字段的值为_id 使用场景请参见:简道云输出 | 无需设置 |
「数据预览」Tab 页如下图所示,可看到数据变化都已被标记字段 fdl_comparison_type 标记出来。
2.5 新增一列记录当次任务运行时间
拖入「新增计算列」算子,新增一列 update ,值为 now() ,为当次任务运行时间。如下图所示:
点击「数据预览」,如下图所示:
2.6 设置数据分发
1)拖入两个「DB表输出」算子,修改「DB表输出」算子名称。如下图所示:
2)右键点击「新增计算列」,点击「数据分发」,设置标识值不是 Removed 的数据流向「DB表输出-新增/更新」算子;标识值为 Removed 的数据流向「DB表输出-删除」算子。如下图所示:
2.7 设置数据输出
2.7.1 设置新增/更新数据的流向
说明:
标识值为 Added、Changed 的数据如下图所示:
本节设置「DB表输出-新增/更新」算子,将新增、更新数据更新到目标表中。
具体设置:
写入方式选择「插入/更新/删除数据」,选择插入、更新,逻辑主键选择 ID ,标识字段默认为 fdl_comparison_type ,标识值需要与「数据比对」算子的「标识关系」值一一对应。如下图所示:
2.7.2 设置删除数据的流向
说明:
标识值为 Removed 的数据如下图所示:
本节设置「DB表输出-删除」算子,将删除的数据更新到目标表中。
具体设置:
写入方式选择「插入/更新/删除数据」,选择更新,标识值为 Removed ,逻辑主键选择 ID ,标识字段默认为 fdl_comparison_type 。如下图所示:
2.8 效果查看
1)运行任务,任务运行成功后,如下图所示:
2)目标表数据如下图所示,可看到新增、修改、删除的数据已同步到目标表中,且 update 字段也已更新。