1. 概述
1.1 背景
某公司大量使用简道云表单进行业务填报,每天产生大量数据。为了与其他系统数据联合使用,这些数据需要定期同步至指定数据库中。
根据简道云录入表单数据的增删改情况,有以下几种情况:
表单数据每天有新增和删除,同时也会有修改的数据。
子表单数据中没有固定的唯一标识,但是也需要将数据变化更新到数据库中。
1.2 思路
将主表单数据和子表单数据分别放到不同的数据库表中:
由于子表单数据无法设置联合主键进行数据更新,可以先删除近一段时间(近七天)的数据,再全量同步近一段时间(近七天)的数据。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「场景案例>数据开发场景>简道云定时取数至数据库」。
2. 操作步骤
2.1 场景模拟
简道云表单「报名表」中存放着课程报名信息,每天数据都有可能变化。现在需要定期将这些数据同步至数据库,方便后续进行数据处理和使用。
2023-04-20 日,删除赵涵的数据,新增张瑶的数据,王娜报名的跆拳道课程数由 19 节改为 15 节。如下图所示:
2.2 方案说明
将主表单数据同步到 registration_form 表中,子表单数据同步到 registration_form_s 表中。
1)对于有唯一主键「报名编号」的主表单数据:
使用「数据比对」算子+「DB表输出」算子,每天将变化数据同步到数据库表中。对于要删除的数据,不实际删除,而是标记他的删除时间。
2)对于没有主键的的子表单数据:
先删除近七天的数据,再全量同步近七天的数据。
2.3 准备工作
2.3.1 简道云表单字段处理
在简道云表单接入前,可提前设置字段别名,否则接入到 FineDataLink 中时会使用字段原始名,不便于在 FineDataLink 中进行业务处理。
进入需要使用表单的编辑界面,选择「数据推送>扩展功能>设置字段别名」,如下图所示:
2.3.2 新增参数
1)本文示例:对于删除的数据,不实际删除,而是标记他的删除时间。所以需要新增一个参数 deletetime ,值为数据被删除的时间。
2)相同步骤,新增参数 time1 ,值为 yyyy-mm-dd-7,代表距离当前时间近七天,便于后续步骤筛选出近七天的子表单数据。如下图所示:
2.4 主表单数据变化同步到数据库
2.4.1 获取简道云数据
1)新建定时任务并拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「简道云输入」算子,获取简道云数据。如下图所示:
3)拖入「字段设置」算子,删除一些不需要的字段。如下图所示:
首次进行数据同步时,可以先使用「DB 表输出」算子,将全量数据进行数据同步写入数据库。如下图所示:
registration_form 表数据如下图所示:
2.4.2 获取数据库表数据
1)由于本文示例不实际删除数据,而是标记他的删除时间。所以存放主表数据的数据库表中需要新增字段 deletetime ,作为标记字段。
2)添加「DB表输入」算子,读取存放主表数据的数据库表。如下图所示:
2.4.3 将变化数据同步到数据库表
1)添加「数据比对」算子,与「字段设置」算子和「DB表输入」算子相连。
2)将简道云数据与数据库表数据进行对比,删除数据的标记值为被删除的时间。如下图所示:
2.4.4 将变化数据同步到数据库表
1)添加「DB表输出」算子,将变化数据同步到数据库表。如下图所示:
注:本步骤中标识字段的值需要与 2.4.3 节标识字段的值相同。
2)点击「字段映射」Tab,选择标记列。如下图所示:
2.4.5 运行节点
1)保存后,运行「数据转换」节点。如下图所示:
2)保存主表数据的数据库表 registration_form 表信息如下图所示:
2.5 子表单数据变化同步到数据库表
由于子表单没有主键,因此我们先删除近一段时间(近七天)的数据,再全量同步近一段时间(近七天)的数据。
2.5.1 子表单数据首次同步
参考本文 2.4.1 节内容,在 2.4.1 节基础上,新增「JSON 解析」算子,解析子表单数据。
1)「简道云输入」算子获取简道云数据后,information 字段是 JSON 格式,需要进行解析。添加「JSON 解析」算子,解析子表单数据。如下图所示:
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)新增「简道云输入」算子,获取简道云数据。如下图所示:
点击「数据预览」,information 字段是 JSON 格式,需要对他解析。
3)拖入「JSON 解析」算子,对 information 字段进行解析。如下图所示:
4)拖入「字段设置」算子,删除不需要的字段。如下图所示:
5)拖入「Spark SQL」算子,获取简道云表单中近七天数据。如下图所示:
6)新增「DB表输出」算子,将简道云表单中近七天数据同步到数据库表中。如下图所示:
7)右键点击「SQL 脚本」节点,选择「运行节点及下游」:
registration_form_s 表数据如下图所示:
2.6 定时执行任务
在调度计划中设置任务定时执行即可。如下图所示: