1. 概述
1.1 应用场景
使用SparkSQL构建日期列并循环取数 中使用构建的日期序列进行 API 取数。
如果用户将使用「循环容器」进行 API 取数作为最小调度单位,有多个前置的参数输出、调度期不同的任务可能都会调用执行这个调度单位任务。每次都重复制作任务太过复杂。
1.2 实现思路
此时可以使用「调用任务」的方式,将「循环容器」进行 API 取数这个任务作为一个子任务,其他任务直接调用该任务即可,不需要在每个任务里重复制作。
例如 使用SparkSQL构建日期列并循环取数 2.2 节已经创建好了日期序列,则可以新建一个定时任务作为子任务-循环容器取数。
2. 操作步骤
由于被调用任务需要循环执行,而循环容器需要前置输入遍历参数,所以无法直接用已经创建的日期序列参数,需要在新的定时任务中重新设置日期序列参数便于循环容器遍历。
2.1 获取父任务传递的参数
首先需要参考使用SparkSQL构建日期列并循环取数 2.1 2.2 节构建日期序列。
然后新建定时任务作为子任务,并新建「数据转换」节点,使用 SparkSQL 算子获取父任务传递的参数,并用函数处理成多行数组,如下图所示:
注:由于被调用任务没有和调用任务有连线上下游关系,因此预览数据会由于参数无法加载而失效,但不必担心,并不影响实际任务的执行。
SparkSQL 语句:
select explode(split('${xunhuanrongqi}', ',')) as xunhuanriqi
将输出值作为参数输出,命名为和使用SparkSQL构建日期列并循环取数 2.2 节日期序列相同的参数,如下图所示:
2.2 设置循环容器
参考使用SparkSQL构建日期列并循环取数 2.3 节设置循环容器内的节点,如下图所示:
2.3 调用任务
保存子任务后,进入父任务,在使用SparkSQL构建日期列并循环取数 2.2 节生成的日期序列后新建「调用任务」节点,选择创建好的子任务作为调用任务,由于子任务需要使用日期序列参数,因此勾选「将当前任务的参数传递给子任务」,并选择日期序列参数,如下图所示:
设置完成后即可执行任务。
2.3 效果查看
运行任务,可以看到根据日期序列取出 API 中每天的数据,同时通知每次循环的情况,如下图所示: