For-each任务主要用于有循环遍历的场景,需要与上游有输出参数的任务(SQL、Python、Shell)联合使用。将带有输出任务的上游作为for-each任务的上游任务,并将其输出结果赋值给for-each任务后,一次次循环来遍历赋值任务的输出结果。
本文为您介绍For each循环任务的组成与应用逻辑。
运行原理

- 支持输出参数的特殊任务:For each循环任务必须要绑定一个有输出参数的上游任务,当前系统支持SQL、Python、Shell三种类型的任务任务可配置「输出参数」。
- LoopArray参数:在For each任务上配置的,用以绑定上游数据,并通过获取上游数据的结果决定在For each任务上的循环次数。以及For each内部任务中替换的具体的值。
- 子任务引用:若For each内部任务需要引用上游任务的值,则可以通过内置参数获取LoopArray绑定的上游的值。
操作步骤
准备上游数据(配置Python任务)
新建一个Python任务,并为其配置「输出参数」
配置For each循环任务
1、配置For each输入参数
点击「调度」->「循环信息」->「输入参数」,绑定LoopArray参数,该参数主要用以接收上游参数的值以及数据集。

loopArray的取值,是通过绑定上游节点的输出参数来决定的。同时也可以通过选择其他配置输出参数的任务后,默认建立两个节点间的依赖关系。
2、循环策略

- 串行:按照循环次数,顺序运行。
- 并行:可并发运行For-each内部循环,提升任务的执行效率。并行时,如果出现其中某个循环体失败的场景,可通过配置「循环出现失败」的处理方式决定后续的循环是直接置为失败还是继续执行。
3、最大循环次数:默认为128次,最大可调至1024次。
4、循环出现失败:当一个For each实例中,其中某个循环体出现失败后,后续的循环的执行策略。
- 停止全部运行:当一个循环体失败后,后续所有未运行的循环体默认置为失败。整个For each实例执行失败。
- 继续后续运行:当一个循环体失败后,后续未运行的循环体不受影响,正常执行调度,直到所有循环执行结束。
5、上游输出参数为空:当上游输出参数为空时当前For each循环如何处理
- 置成功:当前For each循环直接作为成功状态处理,不进行实际的运行。
- 置失败:当前For each循环直接作为失败状态处理。
配置For each内部子任务
在For each任务内部,新建一个SQL节点。
在脚本区域输入${aa}后,在【参数】中对该自定义参数进行配置后,则在实际运行中,可进行参数值的替换。

临时运行
For each循环支持临时运行时,输入loopArray的值去进行测试验证。格式仅支持:一维数组用英文,进行区分;二维数组用[[],[]]的方式。例如[["1","abc"], ["12","abc2"]]
For each循环内置参数
| 参数名称 | 含义 | 示例 |
| dag_foreach_current() | 获取当前循环正在处理的数据项 | 一共循环4次,* 第一次的输出值是1 * 第二次是2 * 第三次是3 * 第四次是4 |
| dag_loopArray() | 获取上游赋值任务传入的完整结果集 | 一共循环4次,* 第一次的输出值是1,2,3,4 * 第二次的输出值是1,2,3,4 * 第三次的输出值是1,2,3,4 * 第四次的输出值是1,2,3,4 , |
| dag_loopTimes() | 获取当前是第几次循环,从 1 开始 | 一共循环4次,* 第一次的输出值是1 * 第二次的输出值是2 * 第三次的输出值是3 * 第四次的输出值是4 |
| dag_offset() | 获取当前循环的偏移量,从 0 开始。 | 一共循环4次,* 第一次的输出值是0 * 第二次的输出值是1 * 第三次的输出值是2 * 第四次的输出值是3 |
联系我们
