历史版本8 :数据比对典型示例 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

[helpvideo]3265[/helpvideo]

1.1 版本说明

FineDataLink 版本功能变动
3.3数据转换节点新增算子「比对删除」,可将来源表中删除数据的操作同步到目标表

1.2 应用场景

同步数据时,来源表数据会新增、修改、删除,此时如果想要在目标数据表中标记来源表中删除的数据,可以使用「数据转换」节点下的「比对删除」算子。

注:更多数据定时更新方案详情参见:数据更新专题

1.3 功能简介

「比对删除」算子要结合数据输入算子使用,因为它自身是一个数据输出算子。其设置项简介如下:

  • 数据源类型:目标表所在数据库的类型。

  • 数据连接:目标表对应的数据连接。

  • 目标表:同步的数据保存到哪个表里。

  • 比对字段:根据哪个或哪些字段来判别数据删除了,允许设置多个字段。

  • 删除方式:默认是物理删除,也就是直接把数据删了,还可以选择逻辑删除,这个方式不删数据,不过会给对应的数据加删除标记。

注:逻辑删除必须选择一个已存在的字段保存标识,标识默认为deleted,可自定义为常量或参数。

3.png

2. 逻辑删除编辑

对于简道云的表单数据,每天会有需要删除的数据,这些需要删除的数据需要同步到目标数据库时有一个标识。

1)新建任务并新增一个「数据转换」节点,进入节点编辑界面,使用简道云输入将表单数据接入 FineDataLink 中,如下图所示:

通过 JSON 解析获取每一条表单填报数据的创建人,如下图所示:

通过 JSON 解析获取每一条表单填报数据的更改人,如下图所示:

字段设置删除一些不需要的字段,如下图所示:

首次进行数据同步时,可以先使用 DB 表输出,将全量数据进行数据同步写入数据库,如下图所示:

然后设置对比删除。

通过对比唯一的主键「orderid」也就是表单中的订单ID字段,如果表单中存在orderid,但是数据库中不存在,此时使用逻辑删除的方式,对于标识字段 deleteTime 标记为${deletetime},如下图所示:

这个${deletetime}我们使用参数设置,将其设置当天,也就是如果表单中存在orderid,但是数据库中不存在,在定时更新的时候目标数据库中的deleteTime字段会写入当前更新时间作为删除标记,如下图所示:

此时运行任务,在目标数据表 jdy_order 中 deleteTime 字段新增更新日期来标记表单中被删除的数据,如下图所示:

3. 物理删除编辑

3.1 场景模拟

示例数据下载:fsale.xlsfsalecopy.xls

某个 ETL 任务定期将 fsale 表中的数据同步到 fsalecopy 表中,某个时间两张表的数据都是相同的,如下图所示:

4.png

现在 fsale 表中删除了甘蔗和冻梨的数据,希望将这个删除操作也同步到 fsalecopy 表中去。

5.png

3.2 创建任务

创建一个 ETL 任务,将一个数据转换节点拖到设计界面,如下图所示:

6.png

3.3 设置数据输入

点击数据转换节点,将一个DB表输入算子拖到数据转换的设计界面,如下图设置数据来源,SQL 语句取出 fsale 表中所有数据。

7.png

3.4 设置比对删除

再将一个比对删除算子拖到设计界面,并使用线条跟它的上游DB表输入算子相连。

点击「比对删除算子对它进行设置,其中目标表设置成 fsalecopy,比对字段设置成 name 字段,删除方式选择物理删除,也就是直接删掉数据。

点击右上角确定,保存数据转换节点的设计。

8.png

3.5 运行任务

回到任务设计界面后,点击右上角保存并运行,日志出现执行成功信息表示任务成功运行。

9.png

可以看到 fsalecopy 表中甘蔗和冻梨的数据在数据同步后也被删除了,如下图所示:

10.png