ForEach循环

更新时间:
复制 MD 格式

ForEach循环中将遍历上游算子输出的每一条记录,并对每条记录逐一执行组合内配置的子流程。适用于上游算子为一拆多逻辑的场景,即一条输入记录被拆分为多条输出记录后,需要对每条拆分结果继续加工。

前提条件

  • 当前实例购买非结构化数据-企业版后,方可使用实时工作流。

  • 当前实例购买非结构化数据-企业版后,方可使用在线工作流。

  • 已完成实时工作流或在线工作流的创建,详细创建步骤请参见创建及管理工作流。

使用限制

  • ForEach循环当前仅支持在实时工作流和在线工作流中使用。

  • ForEach循环支持嵌套使用,最多可嵌套3层。

权限说明

Basic项目的项目管理员、开发者、分析师以及拥有数据集-使用权限的自定义项目角色,可在算子的输入和输出数据集中使用该项目下的所有数据集。

背景信息

ForEach循环是一种容器型控制流算子,用于遍历上游算子输出的数组字段,并对数组中的每一项执行循环体内的子DAG。典型场景为PDF解析后按页/按chunk批量处理(如向量化、信息抽取等)。

image

操作步骤

  1. 在Dataphin首页的顶部菜单栏中,选择研发 > 数据研发。

  2. 在开发页面的顶部菜单栏选择项目。

  3. 在左侧导航栏中选择数据处理 > 工作流,在左侧工作流列表中单击目标工作流,打开工作流画布,在左侧算子库中拖动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:是否因最大迭代数限制而截断。