ForEach循环中将遍历上游算子输出的每一条记录,并对每条记录逐一执行组合内配置的子流程。适用于上游算子为一拆多逻辑的场景,即一条输入记录被拆分为多条输出记录后,需要对每条拆分结果继续加工。
前提条件
-
当前实例购买非结构化数据-企业版后,方可使用实时工作流。
-
当前实例购买非结构化数据-企业版后,方可使用在线工作流。
-
已完成实时工作流或在线工作流的创建,详细创建步骤请参见创建及管理工作流。
使用限制
-
ForEach循环当前仅支持在实时工作流和在线工作流中使用。
-
ForEach循环支持嵌套使用,最多可嵌套3层。
权限说明
Basic项目的项目管理员、开发者、分析师以及拥有数据集-使用权限的自定义项目角色,可在算子的输入和输出数据集中使用该项目下的所有数据集。
背景信息
ForEach循环是一种容器型控制流算子,用于遍历上游算子输出的数组字段,并对数组中的每一项执行循环体内的子DAG。典型场景为PDF解析后按页/按chunk批量处理(如向量化、信息抽取等)。
操作步骤
-
在Dataphin首页的顶部菜单栏中,选择研发 > 数据研发。
-
在开发页面的顶部菜单栏选择项目。
-
在左侧导航栏中选择数据处理 > 工作流,在左侧工作流列表中单击目标工作流,打开工作流画布,在左侧算子库中拖动ForEach循环算子至画布中,并在右侧ForEach循环面板中配置以下参数。
参数
描述
步骤名称
输入当前算子名称,支持任意字符,不超过256个字符。
描述
当前ForEach算子的相关说明。
循环配置
遍历来源
选择上游算子输出的数组字段,循环将按该字段的元素逐项迭代(例如
文本chunk切分.chunk(Array<Object>))。执行模式
选择当前ForEach循环中各迭代项的执行模式,默认选择为并行。
-
并行:各迭代项同时执行,吞吐量更高,但无法保证数据之间的的顺序。
-
串行:按顺序逐项执行,适用于有状态依赖的场景。
最大并行度(非必填)
同时执行的迭代项上限,范围为1~128,默认为10,建议设置为下游服务的QPS上限。
说明仅当执行模式选择并行时,支持此配置项。
最大迭代次数(非必填)
安全上限,超出部分跳过并记入脏数据,默认为5000。
异常处理
失败策略
-
跳过并记录:失败的迭代项将被记录为脏数据,其余迭代项将继续处理。
-
终止循环:任一迭代项执行失败时,系统将立即终止循环,并保留已完成迭代项的结果。
-
终止工作流:任一迭代项执行失败时,整个工作流都将失败,下游也不再执行。
单项超时(非必填)
开启后可设置单个迭代项的超时时间(秒),默认为300秒。
输出配置
ForEach的输出模式固定为数组聚合。所有迭代项的输出会按分支分别收集到数组中,并在全部执行完成后统一传递给下游。您可修改声明字段名,或添加循环体内任意算子的输出字段。
当ForEach内部包含多条分支时,每条分支末端算子的输出都会独立聚合为一个数组。每个输出数组需要自定义名称(仅支持英文字符及英文标点符号)。系统会根据分支末端算子的英文名自动生成输出名称,格式为:
算子英文名_results,您可自行修改。下游算子将引用声明字段,而非末端算子的实际输出。引用格式为:
-
标量字段(List模式展开为多行):
ForEach.{数组名}[*].{字段名} -
Array整体(GET模式映射到Array参数):
ForEach.{数组名}
公共统计
ForEach节点将固定输出以下字段供下游算子使用:
-
total_count:总迭代次数。 -
success_count:成功次数。 -
fail_count:失败次数(跳过的迭代项数)。 -
truncated:是否因最大迭代数限制而截断。
-