1 概述
1.1 版本
服务器版本 |
---|
v8.0.0及之后版本 |
1.2 应用场景
场景一:用户需要从 API 接口取数, API 接口的参数来自数据库内的一列字段。由于 API 接口中,参数每次只能读取一个参数值,所以需要将数据库的某列字段值逐个输出为参数,遍历所有参数从 API 接口取数。
场景二:数据量非常大时,用户希望分段执行,每次只取出一段时间内的数据,直至取出所有时间段内的数据。
1.3 功能简介
【循环容器】节点+参数 联合使用,可满足分批抽取数据的场景。
2 使用限制
1、参数赋值的参数只能给其下游节点使用,循环容器内也是一样的。
2、【循环容器】节点内不能拖入的节点类型:【子任务】节点和【循环容器】节点。
3 功能说明
3.1 遍历循环
3.1.1 使用说明
【循环容器】节点前,需要使用【参数赋值】节点或者【数据转换-参数输出】算子输出参数,然后在【循环容器】中遍历所有参数从数据库/API接口中取数。
注:每次循环使用的参数,来自任务参数。
为便于理解,下面以一个示例说明遍历循环。
场景:
API 接口中包含参数“产品Id”,可取出特定“产品Id”的接口数据。
现在“产品Id”保存在数据库中,希望取出这些“产品Id”对应的接口数据,其中 API 接口每次只能取出一个“产品Id”对应的数据。
方案:
使用【参数赋值】节点将保存在数据库中的“产品Id”取出并输出为参数,将这些参数传递给【循环容器】。
【循环容器】中拖入【单表同步】节点从 API 接口取数,每次取数时只使用一个 “产品Id” ,直到所有“产品Id”都被使用停止循环。
注:【参数赋值】节点中建议设置一个调试值(默认值),便于下游节点引用参数后查看效果,调试值不参与实际运行。
3.1.2 循环限制
循环次数上限。默认1000次,用户可手动调整,上限为10000次,必填。
3.1.3 循环方式
支持两种循环方式:遍历循环(foreach)、条件循环(do-while)。
1)遍历循环:遍历循环参数(数组)中的元素,遍历结束则循环结束,循环次数与遍历对象的元素个数一致。循环次数由字段值的个数决定。
- 当遍历值不为空时,返回布尔值:true,继续下一次循环;
- 当遍历值为空时,返回布尔值:false,结束容器内的循环。
2)条件循环:说明请参见本文 3.2 节内容。
3.1.4 遍历参数
选择当前任务的任务参数,选择的参数逐行获取值,未选择的参数直接获取值。
- 当选择遍历循环(foreach)时,必须选择遍历参数。
- 当选择条件循环(do-while)时,遍历参数可选。
【遍历参数】一般设置为循环容器上游的参数赋值节点输出的参数,可以选择单个或多个。
3.1.5 执行条件
当选择遍历循环(foreach)时,无需配置执行条件,所选参数输出的结果遍历完时结束循环。
3.1.6 容错机制
若用户希望循环容器内能忽略节点的报错继续执行循环,而不是停止下一次循环。例如:API循环取数时取出数据为空中出现的循环取数时,一次获取的批量数据可能为空,则希望此时还能继续执行循环取数,则可使用该功能。
- 默认不勾选:当一次循环中有节点执行报错,不再进行下一次循环。
- 当勾选时:循环容器中有一个节点报错时,继续执行循环(在日志中需要输出单次循环中的错误信息),此循环容器的执行结果还是执行失败。
3.2 条件循环
3.2.1 使用说明
条件循环需要同时满足以下两个条件:
- 具备每次循环取数的参数:使用参数赋值、参数输出等,设置每次循环取数需要用到的参数。参数可以来自容器外,也可以来自容器内。
- 具备循环结束条件:根据实际场景设置循环结束条件,当不符合循环条件时,结束循环。参数可以来自容器外,也可以来自容器内。
为便于理解,下面以一个示例说明遍历循环。
场景:
方案说明:
3.2.2 循环方式
循环限制、容错机制详细说明请参见本文 3.1 章节内容。
条件循环:
先执行一次循环体,再判断条件。设定循环执行和结束的条件,循环次数由条件决定。
- 当条件判断返回布尔值:true,继续下一次循环;
- 当条件判断返回布尔值:false,结束容器内的循环。
3.2.3 执行条件
循环方式为“条件循环”时,必须配置“执行条件”。
需要设定结束条件,条件中的参数可以是循环容器外的参数,也可以是循环容器内的参数。
循环容器的条件循环是 do-while 循环,特点是第一次执行循环时,不论执行条件是否满足,都会执行;第一次之后的循环需要满足执行条件。
例如执行条件设置为${loopTimes}<1,第一次循环时,由于${loopTimes}初始值为1,虽然不满足执行条件,但依然会执行,第一次执行结束后终止循环。
4 日志说明
若离线任务中包含【循环容器】节点,运行任务后,“日志”下会展示最近10 次循环信息。如下图所示:
最后编辑:fancy 更新时间:2025-09-30 17:20
