1. 概述编辑
1.1 版本说明
FineDataLink 版本 | 功能变动 |
---|---|
3.3 | 「数据转换」节点新增算子「比对删除」,可将来源表中删除数据的操作同步到目标表 |
1.2 应用场景
同步数据时,来源表数据会新增、修改、删除,此时如果想要在目标数据表中标记来源表中删除的数据,可以使用「数据转换」节点下的「比对删除」算子。
注:更多数据定时更新方案详情参见:数据更新专题
1.3 功能简介
「比对删除」算子要结合数据输入算子使用,因为它自身是一个数据输出算子。其设置项简介如下:
数据源类型:目标表所在数据库的类型。
数据连接:目标表对应的数据连接。
目标表:同步的数据保存到哪个表里。
比对字段:根据哪个或哪些字段来判别数据删除了,允许设置多个字段。
删除方式:默认是物理删除,也就是直接把数据删了,还可以选择逻辑删除,这个方式不删数据,不过会给对应的数据加删除标记。
注:逻辑删除必须选择一个已存在的字段保存标识,标识默认为deleted,可自定义为常量或参数。
2. 逻辑删除编辑
对于简道云的表单数据,每天会有需要删除的数据,这些需要删除的数据需要同步到目标数据库时有一个标识。
1)新建任务并新增一个「数据转换」节点,进入节点编辑界面,使用简道云输入将表单数据接入 FineDataLink 中,如下图所示:
通过 JSON 解析获取每一条表单填报数据的创建人,如下图所示:
通过 JSON 解析获取每一条表单填报数据的更改人,如下图所示:
字段设置删除一些不需要的字段,如下图所示:
首次进行数据同步时,可以先使用 DB 表输出,将全量数据进行数据同步写入数据库,如下图所示:
然后设置对比删除。
通过对比唯一的主键「orderid」也就是表单中的订单ID字段,如果表单中存在orderid,但是数据库中不存在,此时使用逻辑删除的方式,对于标识字段 deleteTime 标记为${deletetime},如下图所示:
这个${deletetime}我们使用参数设置,将其设置当天,也就是如果表单中存在orderid,但是数据库中不存在,在定时更新的时候目标数据库中的deleteTime字段会写入当前更新时间作为删除标记,如下图所示:
此时运行任务,在目标数据表 jdy_order 中 deleteTime 字段新增更新日期来标记表单中被删除的数据,如下图所示:
3. 物理删除编辑
3.1 场景模拟
示例数据下载:fsale.xls、fsalecopy.xls
某个 ETL 任务定期将 fsale 表中的数据同步到 fsalecopy 表中,某个时间两张表的数据都是相同的,如下图所示:
现在 fsale 表中删除了甘蔗和冻梨的数据,希望将这个删除操作也同步到 fsalecopy 表中去。
3.2 创建任务
创建一个 ETL 任务,将一个「数据转换」节点拖到设计界面,如下图所示:
3.3 设置数据输入
点击「数据转换」节点,将一个「DB表输入」算子拖到数据转换的设计界面,如下图设置数据来源,SQL 语句取出 fsale 表中所有数据。
3.4 设置比对删除
再将一个「比对删除」算子拖到设计界面,并使用线条跟它的上游「DB表输入」算子相连。
点击「比对删除」算子对它进行设置,其中目标表设置成 fsalecopy,比对字段设置成 name 字段,删除方式选择物理删除,也就是直接删掉数据。
点击右上角「确定」,保存「数据转换」节点的设计。
3.5 运行任务
回到任务设计界面后,点击右上角「保存并运行」,日志出现执行成功信息表示任务成功运行。
可以看到 fsalecopy 表中甘蔗和冻梨的数据在数据同步后也被删除了,如下图所示: