1. 概述编辑
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
3.3 | 「数据转换」节点新增算子「比对删除」,可将来源表中删除数据的操作同步到目标表 |
4.0.18 |
|
4.0.20 | 新增「比对表返回字段」选项,可选项为比对表的所有字段。一般在当「数据比对」算子连接的比对表算子类型为「简道云输入」算子时,才会设置该选项 |
注:未升级到 4.0.18 及之后版本的用户,请参见文档:比对删除
1.2 功能简介
同步数据时,来源表数据会新增、修改、删除,此时如果需要目标表数据也做这些操作,可以通过「数据比对」+「DB表输出」的组合方式,完成增量插入、删除、更新的操作。
2. 示例编辑
2.1 场景模拟
示例数据下载:fsale.xls、fsalecopy.xls
需要定期将 fsale 表中的数据同步到 fsalecopy 表中。
fsalecopy 表中的数据如下图所示:
现在 fsale 表中删除了「甘蔗」和「冻梨」的数据,增加了「葡萄」的数据,更新了「菠萝」的数据。希望将最新数据同步到 fsalecopy 表中去。
2.2 实现思路
「数据比对」算子与「DB表输出」算子组合使用,才能完成目标表的增删改操作。
1)需要先准备两个输入/计算算子,作为来源表和目标表,本文示例准备的是 fsalecopy 表和 fsale 表。
2)「数据比对」算子中,需要设置以下三项:
注:当「数据比对」算子连接的比对表算子类型为 简道云输入 时,才需要在「更多配置」中设置比对表返回字段的值为_id;其他情况下,无需配置。
设置项 | 说明 | 本文示例 |
---|---|---|
逻辑主键 | 用于在两张表中识别同一条数据,即通过「逻辑主键」将来源表和目标表的数据对应起来,所以「逻辑主键」的值不建议为空或者相同 | ID |
比对字段 | 用于对比两张表中该字段的差异,若某个字段没有被选择到「比对字段」中,能识别出该字段的增加和删除,但这个字段若存在更新,将不能被识别 基于比较结果会生成标记列 fdl_comparison_type ,该列可以在「DB表输出」算子的字段映射中删除 | - |
标识关系 | 标记列 fdl_comparison_type 的值,用于标记两张表中同一个字段的差异。默认值为:Identical、Changed、Added、Removed,可以自定义标识关系值 | 使用的默认值 |
3)「DB表输出」算子中,写入方式选择「插入/更新/删除数据」,可选择逻辑删除还是物理删除。「标识值」需要与「数据比对」算子中的「标识关系」值一一对应。逻辑主键与「数据比对」算子的相同即可,为 ID 。
2.3 设置来源表和目标表
2.3.1 创建任务
创建一个定时任务,将一个「数据转换」节点拖到设计界面。如下图所示:
2.3.2 设置来源表
1)点击「数据转换」节点,将一个「DB表输入」算子拖到数据转换的设计界面,在「节点信息」Tab 下为其重命名为「来源表」。如下图所示:
2)如下图设置数据来源,SQL 语句取出 fsale 表中所有数据。
2.3.3 设置目标表
再添加一个「DB表输入」算子,重命名为「目标表」。SQL 语句取出 fsalecopy 表中所有数据。如下图所示:
2.4 设置数据比对
1)添加一个「数据比对」算子,并使用线条跟它上游的两个「DB表输入」算子相连。如下图所示:
2)「数据比对」算子中,由于来源表和目标表中可以通过 ID 字段进行关联,所以选择 ID 作为逻辑主键;由于来源表和目标表的 sales 字段可以查看两张表的数据差异情况,所以选择 sales 作为比对字段。标识关系值用来标记数据变化,可自定义,本文使用默认值。具体设置如下图所示:
注:1:「比对源」是自动生成的。
注2:当「数据比对」算子连接的比对表算子类型为 简道云输入 时,才需要在「更多配置」中设置比对表返回字段的值为_id;其他情况下,无需配置。
「数据预览」Tab 页如下图所示:
2.5 设置 DB 表输出
1)新增「DB表输出」算子,使用连接线与「数据比对」算子相连。
2)设置「DB表输出」算子,最新数据存到目标表 fsalecopy 中,写入方式选择「插入/更新/删除数据」,写入方式选择「物理删除」,逻辑主键选择 ID ,标识字段选择 fdl_comparison_type ,标识值需要与「数据比对」算子的「标识关系」值一一对应。如下图所示:
3)点击「字段映射」,删除目标表字段 fdl_comparison_type 。如下图所示:
4)点击右上角「保存」按钮。
2.6 运行任务
点击右上角「保存并运行」,日志出现执行成功信息表示任务成功运行。如下图所示:
可以看到 fsalecopy 表与 fsale 表数据保持一致。如下图所示:
3. 功能说明编辑
3.1 比对配置
各设置项介绍如下表所示:
设置项 | 说明 | 备注 |
---|---|---|
比对源 |
|
|
逻辑主键 | 用于在两张表中识别同一条数据,即通过「逻辑主键」将来源表和目标表的数据对应起来 | 逻辑主键的值不建议为空或者相同 |
比对字段 | 用于对比两张表中该字段的差异,基于比较结果会生成标记列 fdl_comparison_type ,该列可以在「DB表输出」算子的「字段映射」中删除 | 「比对字段」配置可以为空:
|
标识关系 | 默认新增标记列,列名为 fdl_comparison_type,值默认为四种:
| 支持用户自定义 4 种标记值,但是 FDL 程序需要能自动映射 例如: 例如针对比对更新场景,支持用户将 Identical 改成 same ,Changed 改成 diff ,Added 改成 add,Removed 改成 delete,但是程序能够识别这种映射关系,并且在后续的DB 表输出能够自动填充 (「DB表输出」算子的「标识值」需要与「数据比对」算子中的「标识关系」值一一对应) |
比对表返回字段 | 1)可选项为比对表的所有字段,一般情况下默认为空 2)当「数据比对」算子连接的比对表算子类型为 简道云输入 时,需要设置比对表返回字段的值为_id 3)遇到同名字段时,比对表返回字段下拉时对重名字段名后缀自动加1,格式为:column1、column2、column3,重名新增后缀的逻辑同数据关联算子 使用场景请参见:简道云输出 |
3.2 数据预览
「数据预览」Tab 中,预览时只会取前 5000 行数据。如果来源表前 5000 行数据中的某些数据,在目标表的 5000 行数据之后存在,在「数据预览」Tab 中,标记列对应的值将会是 Added,但实际上应该是 Identical。但「数据比对」算子运行时,是比对所有数据的,用户无需担心,「数据预览」Tab 未全量读取数据的问题,产品未来考虑优化。