最新历史版本 :简道云数据增删改同步至数据库 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 背景

某公司大量使用简道云表单进行业务填报,每天产生大量数据。为了与其他系统数据联合使用,这些数据需要定期同步至指定数据库中。

根据简道云录入表单数据的增删改情况,有以下几种情况:

  • 表单数据每天有新增和删除,同时也会有修改的数据。

  • 子表单数据中没有固定的唯一标识,但是也需要将数据变化更新到数据库中。

1.2 思路

将主表单数据和子表单数据分别放到不同的数据库表中:

  • 主表单数据有新增、修改和删除,使用「数据比对」算子+「DB表输出」算子,每天将变化数据同步到数据库表中。

  • 由于子表单数据无法设置联合主键进行数据更新,可以先删除近一段时间(近七天)的数据,再全量同步近一段时间(近七天)的数据。

1.3 任务展示

FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「场景案例>数据开发场景>简道云定时取数至数据库」。

50.png

2. 操作步骤编辑

2.1 场景模拟

简道云表单「报名表」中存放着课程报名信息,每天数据都有可能变化。现在需要定期将这些数据同步至数据库,方便后续进行数据处理和使用。

2023-04-20 日,删除赵涵的数据,新增张瑶的数据,王娜报名的跆拳道课程数由 19 节改为 15 节。如下图所示:

12.png

2.2 方案说明

将主表单数据同步到 registration_form 表中,子表单数据同步到 registration_form_s 表中。

1)对于有唯一主键「报名编号」的主表单数据:

使用「数据比对」算子+「DB表输出」算子,每天将变化数据同步到数据库表中。对于要删除的数据,不实际删除,而是标记他的删除时间。

2)对于没有主键的的子表单数据:

先删除近七天的数据,再全量同步近七天的数据。

2.3 准备工作

2.3.1 简道云表单字段处理

在简道云表单接入前,可提前设置字段别名,否则接入到 FineDataLink 中时会使用字段原始名,不便于在 FineDataLink 中进行业务处理。

进入需要使用表单的编辑界面,选择「数据推送>扩展功能>设置字段别名」,如下图所示:

17.png

2.3.2 新增参数

1)本文示例:对于删除的数据,不实际删除,而是标记他的删除时间。所以需要新增一个参数 deletetime ,值为数据被删除的时间。

2)相同步骤,新增参数 time1 ,值为 yyyy-mm-dd-7,代表距离当前时间近七天,便于后续步骤筛选出近七天的子表单数据。如下图所示:

2.4 主表单数据变化同步到数据库

2.4.1 获取简道云数据

1)新建定时任务并拖入「数据转换」节点,进入「数据转换」节点。

2)拖入「简道云输入」算子,获取简道云数据。如下图所示:

18.png

3)拖入「字段设置」算子,删除一些不需要的字段。如下图所示:

19.png

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

registration_form 表数据如下图所示:

2.4.2 获取数据库表数据

1)由于本文示例不实际删除数据,而是标记他的删除时间。所以存放主表数据的数据库表中需要新增字段 deletetime ,作为标记字段。

2)添加「DB表输入」算子,读取存放主表数据的数据库表。如下图所示:

2.4.3 将变化数据同步到数据库表

1)添加「数据比对」算子,与「字段设置」算子和「DB表输入」算子相连。

1681903914435828.png

2)将简道云数据与数据库表数据进行对比,删除数据的标记值为被删除的时间。如下图所示:

1681905979726549.png

2.4.4 将变化数据同步到数据库表

1)添加「DB表输出」算子,将变化数据同步到数据库表。如下图所示:

注:本步骤中标识字段的值需要与 2.4.3 节标识字段的值相同。

2)点击「字段映射」Tab,选择标记列。如下图所示:

28.png

2.4.5 运行节点

1)保存后,运行「数据转换」节点。如下图所示:

1681904343215340.png

2)保存主表数据的数据库表 registration_form 表信息如下图所示:

2.5 子表单数据变化同步到数据库表

由于子表单没有主键,因此我们先删除近一段时间(近七天)的数据,再全量同步近一段时间(近七天)的数据。

2.5.1 子表单数据首次同步

参考本文 2.4.1 节内容,在 2.4.1 节基础上,新增「JSON 解析」算子,解析子表单数据。

1681955475854989.png

1)简道云输入算子获取简道云数据后,information 字段是 JSON 格式,需要进行解析。添加JSON 解析算子,解析子表单数据。如下图所示:

44.png

2)使用字段设置算子删除不需要的字段。DB 表输出算子将数据输出到 registration_form_s 表中。运行数据转换节点后,registration_form_s 表数据如下图所示:

2.5.2 删除近七天数据

拖入「SQL 脚本」节点,删除存放子表单数据的数据库表中近七天数据。如下图所示:

DELETE FROM `demotest`.`regisration_form_s` 
  WHERE updateTime> DATE_SUB(NOW(), INTERVAL 7 DAY)

2.5.3 更新近七天数据

1)拖入「数据转换」节点,进入编辑界面。

2)新增简道云输入算子,获取简道云数据。如下图所示:

36.png

点击数据预览,information 字段是 JSON 格式,需要对他解析。

37.png

3)拖入「JSON 解析」算子,对 information 字段进行解析。如下图所示:

38.png

4)拖入「字段设置」算子,删除不需要的字段。如下图所示:

5)拖入「Spark SQL」算子,获取简道云表单中近七天数据。如下图所示:

6)新增「DB表输出」算子,将简道云表单中近七天数据同步到数据库表中。如下图所示:

7)右键点击「SQL 脚本」节点,选择运行节点及下游」:

1681907815482165.png

registration_form_s 表数据如下图所示:

2.6 定时执行任务

在调度计划中设置任务定时执行即可。如下图所示: