DataWorks为您提供循环节点(do-while节点),您可以重新编排do-while节点内部的业务流程,将需要循环执行的逻辑写在节点内,再编辑结束循环判断节点来控制是否退出循环。同时您也可以结合赋值节点来循环遍历赋值节点传递的结果集。
节点介绍
再do-while节点中,您可根据业务需要重新编排循环节点内部业务流程,将需要循环执行的业务逻辑放入循环节点内部,并通过循环节点内部的End节点来定义循环条件,即确认不满足何种条件的情况下退出循环。循环节点可单独使用,也可结合赋值节点来循环遍历赋值节点传递的结果集。本文为您介绍do-while节点的组成与应用逻辑。
前提条件
RAM账号添加至对应空间(可选)。
进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员。
对应空间已绑定Serverless资源组。详情请参见:使用Serverless资源组。
进行do-while节点开发前,需创建对应的do-while节点,详情请参见:创建周期任务。
使用限制
仅DataWorks标准版及以上版本支持使用do-while节点。详情请参见DataWorks各版本详解。
不支持并发执行。即上次循环完成后才可进入下一次循环。
注意事项
维度 | 分类 | 说明 |
维度 | 分类 | 说明 |
循环支持 | 循环次数上限 | do-while节点最多支持循环128次,End节点控制循环次数时,如果超过了128次,则运行会报错。 |
内部节点 | 流程编排 |
|
取值 | 提供内置变量获取上游赋值节点的输出值。 | |
调试运行 | 任务调试 | DataWorks在标准模式下,不支持在Data Studio界面直接测试运行do-while节点。 如果您想测试验证do-while节点的运行结果,您需要将包含do-while节点的任务发布提交到开发环境运维中心,在开发环境运维中心页面运行do-while节点任务。 |
查看日志 | 在运维中心查看do-while节点的执行日志时,您需要右键单击实例,选择查看内部节点来查看内部节点的执行日志。 | |
上下游依赖 | 依赖设置 | 循环节点可单独使用,也可结合赋值节点使用,在运维中心执行任务时,选择补数据功能,并同时选中执行赋值节点与循环节点,单独运行循环节点将无法获取到赋值节点传递的值。 |
内置变量
通常,do-while节点使用${dag.变量名}格式来获取变量。DataWorks为您提供了两个系统内置变量${dag.loopTimes}、${dag.offset};同时,您也可以结合赋值节点,通过${dag.变量名}格式获取赋值参数值。
系统内置变量
每次任务循环运行时,您可以通过一些内置的变量来获取当前已循环次数和偏移量。
内置变量
含义
取值
内置变量
含义
取值
${dag.loopTimes}
当前已循环次数。
第一次循环为1、第二次为2、第三次为3…第n次为n。
${dag.offset}
偏移量。
第一次循环为0、第二次为1、第三次为2…第n次为n-1。
获取赋值节点结果
如果您联合使用了赋值节点,则还可以通过以下方式来获取赋值参数值和循环变量参数。
当do-while节点依赖赋值节点时,您可将赋值节点的本节点输出参数设置为do-while节点的本节点输入参数,在do-while节点中获取赋值节点的结果集与结果集中的指定节点。格式为${dag.变量名},其中,变量名需配置为do-while节点的本节点输入参数。本文示例定义do-while节点中的
input
参数(即本节点输入参数)来接收赋值节点结果集,实际使用时,需替换为您真实的参数名称。内置变量
含义
内置变量
含义
${dag.input}
上游赋值节点传递的数据集。
${dag.input[${dag.offset}]}
循环节点内部获取当前循环的数据行。
${dag.input.length}
循环节点内部获取数据集长度。
步骤一:do-while节点开发
do-while节点开发说明
do-while节点默认包含开始、
结束,以及do-while循环体三部分组成
开始:是一个循环开始的标记节点,并无业务作用,不可删除。
do-while循环体:可添加不同节点进行业务处理
结束:具有标记循环结束和判断是否开启下一次循环的功能,此处用于定义do-while节点的结束条件,不可删除。
您也可根据业务背景自定义do-while节点内部业务流程,将中间的do-while循环体添加更多节点。
配置do-while节点
进入do-while节点,默认包含开始、
结束,以及do-while循环体三部分,配置do-while节点。
单击循环体的新建内部节点,在下拉框里选择Shell节点,并对Shell节点进行命名。
编辑Shell节点。
鼠标单击循环体内创建的Shell节点,右键选择打开节点,进入Shell节点编辑页面。
Shell节点开发:
echo ${dag.loopTimes} ----打印循环的次数。
do-while节点的
开始和
结束的逻辑是固定的,不可以编辑。
Shell节点中的代码修改后请务必保存,提交时不会进行提示。如果未保存,最新的代码将无法及时更新。
${dag.loopTimes}
变量是系统的保留变量,代表当前的循环次数,从1开始,do-while的内部节点可以直接引用该变量。更多内置变量请参见内置变量。
单击工具栏的
图标,保存Shell节点。
定义退出循环条件
进入do-while节点,默认包含开始、
结束,以及do-while循环体三部分,配置
结束部分,定义该循环第5次时退出循环。
鼠标右键单击
选择打开节点,编辑以下代码,定义do-while节点的结束条件。
if ${dag.loopTimes}<5: print True; else: print False;
${dag.loopTimes}变量是系统的保留变量,代表当前的循环次数,从1开始,do-while的内部节点可以直接引用该变量。更多内置变量请参见内置变量。
代码中把
dag.loopTimes
和5进行比较,可以限制整体的循环次数。第一次循环dag.loopTimes
为1、第二次为2,以此类推,第五次为5。至此表达式${dag.loopTimes}<5结果为False,退出循环。
单击工具栏的
图标,保存
结束节点。
保存并发布do-while流程
配置完成do-while循环体Shell节点后退出循环条件后,返回至工作流中,单击发布,将上游赋值节点与do-while进行发布,详情请参见:节点/工作流发布。
需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
测试并查看测试结果
发布完成的任务,将按照您配置的任务调度进行周期运行,可在
中查看已发布的周期任务,并对任务进行运维操作。在周期任务页面,对do-while节点和游的赋值节点进行执行补数据并查看补数据实例(新版)。
,详情请参见
附录:do-while特性对比与说明
do-while与while、for-each和do-while三种循环类型对比如下:
do-while能够实现先循环再判断的循环体,即do…while语句,能够通过系统的变量dag.offset结合节点上下文间接实现foreach语句。
do-while不能实现先判断再循环的方式,即while语句。
do-while运行流程:
从Start开始按任务依赖关系依次运行循环体中的任务。
运行用户在End节点中定义的代码。
如果End节点输出True,则继续下一个循环。
如果End节点输出False,则终止循环。
如何使用上下文依赖:do-while的内部节点可以通过${dag.上下文变量名}的方式引用到do-while节点定义的节点上下文。
系统参数:DataWorks会为do-while内部节点自动下发两个系统变量。
dag.loopTimes:从1开始标识这次循环的次数。
dag.offset:从0开始标识该次循环相对于第一次循环的次数偏移量。
- 本页导读 (1)
- 节点介绍
- 前提条件
- 使用限制
- 注意事项
- 内置变量
- 步骤一:do-while节点开发
- do-while节点开发说明
- 配置do-while节点
- 定义退出循环条件
- 保存并发布do-while流程
- 测试并查看测试结果
- 附录:do-while特性对比与说明