
# For Each
#### 功能
该节点可以指定一个子作业循环执行，并支持用一个数据集对子作业中的变量进行循环替换。
For Each节点的具体使用教程，请参见[For Each节点使用介绍](https://support.huaweicloud.com/bestpractice-dataartsstudio/dataartsstudio_05_0103.html)。
![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
For Each节点单次运行时，指定的子作业最多循环执行1000次。
如果DLI SQL作为前置节点，For Each节点最多支持100个子作业。
#### 参数
用户可参考[表1]配置For Each节点的参数。
 表1属性参数 
| 参数        | 是否必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| 节点名称      | 是    | 节点名称，可以包含中文、英文字母、数字、"_"、"-"、"/"、"\<"、"\>"等各类特殊字符，长度为1～128个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 循环执行的子作业  | 是    | 选择需要循环执行的子作业。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 子作业参数     | 否    | 仅当循环执行的子作业配置了作业参数后，出现该参数。参数名即子作业中定义的变量，参数值按如下原则填写： - 当循环执行的子作业需要根据父作业的变量读取替换时，则本参数为可配置为EL表达式，一般配置为#{Loop.current\[0\]}或#{Loop.current\[1\]}等，表示循环中取遍历到的数据集二维数组当前行的第一个值或第二个值等，详见[Loop内嵌对象](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0534.html)；循环执行的子作业的作业参数名配置后，参数值无需配置可置为空。  - 当循环执行的子作业需要使用自身参数变量运行时，则本参数可置为空；循环执行的子作业的作业参数需配置参数值。  - 子作业带有自定义后缀，也不支持按照实例名称进行搜索。拆分之后，得到的jobName并非foreach作业名称。                                                                                                                                                                                      |
| 数据集       | 是    | For循环算子需要定义一个数据集，这个数据集用来循环替换子作业中的变量，数据集应为二维数组，每一行数据会对应一个子作业实例。数据集的来源包括： - 来自于上游节点的输出。例如DLI SQL、Hive SQL、Spark SQL的select语句，或者Shell节点的echo等。使用EL表达式为：#{Job.getNodeOutput('preNodeName')}，即前一个节点的输出值。如果上游输出含特殊字符，仅\*可被正确解析。  - 来自于给定的数组。如二维数组：\[\['001'\],\['002'\],\['003'\]\] 。 说明： - 如果要让"00""01"当成数字类型作为参数传递，需要配置为\[\["00"\],\["01"\]\];\[\[00\],\[01\]\];\[\['00'\],\['01'\]\]。  - 如果要让"00""01"当成字符类型作为参数传递，需要加上转义字符，例如：\[\["\\"00\\""\],\["\\"01\\""\]\];\[\['\\'00\\''\],\['\\'01\\''\]\]      |
| 子作业并发数    | 是    | 循环产生的子作业可以并发执行，您可设置并发数。 说明： 如果子作业中包含CDM Job、Data Quality Monitor节点，子作业并发数需要设置为1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 子作业实例名称后缀 | 否    | For循环生成的子任务名称：For循环节点名称 + 下划线 + 后缀。 后缀可配置，如果不配置，则按照数字顺序依次递增。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 循环异常处理策略  | 是    | - 继续执行 子作业存在运行失败，后续子作业继续运行，直到所有子作业运行完成。   - 退出循环 如果子作业并发数设置为1，子作业运行失败，后续子作业实例不再生成，foreach节点实例状态为失败。 如果子作业并发数设置为大于1（例如，并发数设置为2），子作业运行失败，后续子作业实例不再生成，待正在运行的子作业运行完成，foreach节点实例状态为失败。                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
表2高级参数 
| 参数               | 是否必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| 节点执行的最长时间        | 是    | 设置节点执行的超时时间，如果节点配置了重试，在超时时间内未执行完成，该节点将会再次重试。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 失败重试             | 是    | 节点执行失败后，是否重新执行节点。 - 是：重新执行节点，请配置以下参数。 - 超时重试  - 最大重试次数  - 重试间隔时间（秒）    - 否：默认值，不重新执行节点。 说明： 如果作业节点配置了重试，并且配置了超时时间，该节点执行超时后，系统支持再重试。 当节点运行超时导致的失败不会重试时，您可前往"默认项设置"修改此策略。 当"失败重试"配置为"是"才显示"超时重试"。    |
| 当前节点失败后，后续节点处理策略 | 是    | 节点执行失败后的操作： - 终止后续节点执行计划：停止后续节点的运行，当前作业实例状态显示为"失败"。  - 终止当前作业执行计划：停止当前作业运行，当前作业实例状态显示为"失败"。  - 继续执行下一节点：忽略当前节点失败，当前作业实例状态显示为"忽略失败"。  - 挂起当前作业执行计划：当前作业实例的状态为运行异常，该节点的后续节点以及依赖于当前作业的后续作业实例都会处于等待运行状态。                                                                                                                                                                                                          |
| 是否空跑             | 否    | 如果勾选了空跑，该节点不会实际执行，将直接返回成功。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 任务组              | 否    | 选择任务组。任务组配置好后，可以更细粒度地进行当前任务组中的作业节点的并发数控制，比如作业中包含多个节点、补数据、重跑等场景。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
