1. 概述
1.1 应用场景
API 接口中每天有 20 多万的数据,若落库到同一张表中,随着时间该表数据不断累积,可能造成查询慢的问题。
希望能按日期分表,每天创建一个新的数据表,保存该天数据。
1.2 实现思路
根据实际需要从 API 接口中取出今天数据,将数据落库到临时表中。
自定义每天的表名,创建表结构,将临时表中的数据写入新创建的表中。
清空临时表,设置调度频率。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/「API取数-数据每日落库」。
2. 操作步骤
2.1 场景模拟
API 接口中保存着订单数据,且每天新增;希望每天从 API 接口中取出当天包含部分「客户ID」的数据,每天的数据单独保存。
本文示例中,使用 数据服务 创建的 API 模拟 API 接口,可以通过开始时间、结束时间、客户ID从 API 接口取数。如下图所示:
2.2 将每日数据落库到临时表中
本节步骤,用户可根据实际情况,从 API 接口中取出每天数据,保存到临时表中。
2.2.1 参数准备
本文示例中,是取出每天包含部分「客户ID」的订单数据,所以需要向 API 接口中传入每天的开始时间、结束时间、客户ID参数。
1)新建定时任务,拖入「参数赋值」节点,取出当天的开始日期和结束日期。如下图所示:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00') AS start_time,DATE_FORMAT(NOW(), '%Y-%m-%d 23:59:59') AS end_time;
输出参数start_time、end_time。如下图所示:
2)由于要从 API 接口中取出当天特定「客户ID」对应的订单数据,需要将「客户ID」取出,输出为参数。
再次拖入「参数赋值」节点,将「客户ID」输出为参数。如下图所示:
2.2.2 从API中取出数据输出到临时表中
1)拖入「循环容器」节点,「循环容器」节点中拖入「数据转换」节点。
循环遍历客户ID,从 API 接口中取出客户ID对应的当天数据。「循环容器」节点设置页面如下图所示:
2)「循环容器」节点中拖入「数据转换」节点,进入「数据转换」节点。
拖入「API输入」算子,使用 2.2.1 节准备的参数,从 API 接口中取数,每次取出当天某客户ID对应的订单数据。
点击「数据预览」,如下图所示:
可发现,取出的订单数据在 data 字段中。
3)拖入「JSON解析」算子,解析 data 字段,如下图所示:
点击「数据预览」,如下图所示:
4)由于使用「客户ID」通过「循环容器」节点遍历订单数据,若当天订单数据中没有该「客户ID」对应的数据,临时表中会新增一条空数据,需要把空数据删除。
拖入「数据过滤」算子,过滤出「订单ID」非空的数据。如下图所示:
5)拖入「DB表输出」算子,将取出的数据输出到临时表中。如下图所示:
写入方式选择「追加写入数据」。点击右上角「保存」按钮。
2.3 创建表名并输出为参数
准备保存每天数据的表名。
1)拖入「参数赋值」节点,自定义表名并输出为参数。
本文示例中,每天的表名是:test+当天日期,比如今天日期是2024-01-10,表名为:test20240110。
SELECT CONCAT('test', DATE_FORMAT(NOW(), '%Y%m%d'));
2)将表名输出为参数。如下图所示:
2.3 创建表结构
创建表,表名称为${tablename},表结构与 2.2 节临时表的表结构一样,建议字段顺序也与临时表的相同。
拖入「SQL脚本」节点,创建表结构。如下图所示:
2.4 将临时表数据插入到新建表中
使用「SQL脚本」节点,将 2.2 节临时表数据,插入到 2.4 节新建的表中。如下图所示:
INSERT INTO ${tablename}
SELECT * FROM linshi
2.5 清空临时表
每天需要将临时表中的数据插入到每天新建的表中,所以每天数据落库后,要清空临时表,方便下次数据落库。
拖入「SQL脚本」节点,清空临时表数据。如下图所示:
TRUNCATE TABLE linshi
2.6 效果查看
点击右上角「保存并运行」按钮,任务执行成功后,今天特定客户ID的订单数据已被取出,如下图所示:
2.7 设置执行频率
点击「任务控制」,在「调度配置」Tab下配置执行频率。如下图所示: