1. 概述
1.1 应用场景
用户有一接口返回 XML 格式数据(数据量较多),希望从该接口中取出所有数据。
存在问题如下:
需要循环取数,但接口没有分页结束标识。
API输入-分页取数 功能目前不支持 xpath 路径。
1.2 实现思路
1.3 任务展示
2. 操作步骤
2.1 场景模拟
使用 FDL 的数据服务功能发布一个接口,模拟返回 XML 格式数据的接口。如下图所示:
下图 SQL 语句含义:当 n 为 0 时,取前 30 条数据;当 n 为 30 时,取第 31 到 60 的数据;当 n 为 60 时,取第 61 到第 90 条的数据,以此类推。
2.2 构建初始条件参数
方案需要使用循环容器进行循环取数,循环容器的执行条件设置为:将每次取数的第一条数据输出为参数 ID,若 ID 不为空,则执行循环。
本节目的:构建一个非空的参数 ID(参数值非空即可),让第一次循环跑起来。
1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「Spark SQL」算子,输入语句:select '1' as a。如下图所示:
3)拖入「参数输出」算子,将数据输出给参数 ID。如下图所示:
2.3 设置循环容器
拖入「循环容器」节点,设置循环方式为「条件循环」,执行条件为:ID 不为空。如下图所示:
注:若数据较多,需根据实际情况调整最多循环的次数。
2.4 构建偏移量
1)「循环容器」节点中拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「Spark SQL」算子,输入语句:select (${loopTimes}-1)*30 as skip。如下图所示:
注:loopTimes 为循环容器内置参数,初始值为1。
3)拖入「参数输出」算子,将数据输出给参数 n。如下图所示:
2.5 分页取数
1)「循环容器」节点中再拖入一个「数据转换」节点,进入「数据转换」节点。
2)拖入「API输入」算子,使用偏移量参数 n 进行取数。如下图所示:
注:该步骤为模拟从 API 接口中取出 XML 数据,用户根据实际情况进行操作。
3)点击「数据预览」,可查看取出的数据。如下图所示:
4)需要对取出的数据进行解析。
实际场景中,需要拖入「XML解析」算子进行解析。本文示例为模拟实际场景,实际数据并非 XML 格式而为 JSON 格式,所以使用「JSON解析」算子进行解析。
5)数据解析后,可根据实际情况进一步处理。
本文示例中,拖入「DB表输出」算子,将解析后的数据输出到数据表中。如下图所示:
在「JSON解析」算子后,再拖入一个「参数输出」算子,将取出数据第一条的主键字段(非空字段),输出为参数 ID。如下图所示: