do-while节点

更新时间:2025-03-21 03:24:20

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次,则运行会报错。

内部节点

流程编排

  • 自定义循环任务节点时,您可以删除内部节点间的依赖关系,重新编排循环节点内部业务流程,但需要分别将Start节点End节点作为do-while节点内部业务流程的首末节点。

  • do-while节点的内部节点使用分支节点进行逻辑判断或者结果遍历时,需要同时使用归并节点

  • do-while节点的内部节点End节点在代码开发时,不支持添加注释。

取值

提供内置变量获取上游赋值节点的输出值。

调试运行

任务调试

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节点默认包含image开始、image结束,以及do-while循环体三部分组成

  • image开始:是一个循环开始的标记节点,并无业务作用,不可删除。

  • do-while循环体:可添加不同节点进行业务处理

  • image结束:具有标记循环结束和判断是否开启下一次循环的功能,此处用于定义do-while节点的结束条件,不可删除。

说明

您也可根据业务背景自定义do-while节点内部业务流程,将中间的do-while循环体添加更多节点。

配置do-while节点

进入do-while节点,默认包含image开始、image结束,以及do-while循环体三部分,配置do-while节点。

  1. 单击循环体的新建内部节点,在下拉框里选择Shell节点,并对Shell节点进行命名。

  2. 编辑Shell节点。

    1. 鼠标单击循环体内创建的Shell节点,右键选择打开节点,进入Shell节点编辑页面。

    2. Shell节点开发:

      echo ${dag.loopTimes} ----打印循环的次数。
      说明
      • do-while节点的image开始和image结束的逻辑是固定的,不可以编辑。

      • Shell节点中的代码修改后请务必保存,提交时不会进行提示。如果未保存,最新的代码将无法及时更新。

      • ${dag.loopTimes}变量是系统的保留变量,代表当前的循环次数,从1开始,do-while的内部节点可以直接引用该变量。更多内置变量请参见内置变量

  3. 单击工具栏的image图标,保存Shell节点。

定义退出循环条件

进入do-while节点,默认包含image开始、image结束,以及do-while循环体三部分,配置image结束部分,定义该循环第5次时退出循环。

  1. 鼠标右键单击image选择打开节点,编辑以下代码,定义do-while节点的结束条件。

    if ${dag.loopTimes}<5: 
     print True; 
    else: 
     print False;
    • ${dag.loopTimes}变量是系统的保留变量,代表当前的循环次数,从1开始,do-while的内部节点可以直接引用该变量。更多内置变量请参见内置变量

    • 代码中把dag.loopTimes5进行比较,可以限制整体的循环次数。第一次循环dag.loopTimes1、第二次为2,以此类推,第五次为5。至此表达式${dag.loopTimes}<5结果为False,退出循环。

  2. 单击工具栏的image图标,保存image结束节点。

保存并发布do-while流程

配置完成do-while循环体Shell节点后退出循环条件后,返回至工作流中,单击发布,将上游赋值节点与do-while进行发布,详情请参见:节点/工作流发布

说明

需要设置节点的重跑属性依赖的上游节点,才可以提交节点。

测试并查看测试结果

  1. 发布完成的任务,将按照您配置的任务调度进行周期运行,可在运维中心 > 任务运维 > 周期任务运维 > 周期任务中查看已发布的周期任务,并对任务进行运维操作。

  2. 在周期任务页面,对do-while节点和游的赋值节点进行补数据 > 当前节点及下游节点,详情请参见执行补数据并查看补数据实例(新版)

附录:do-while特性对比与说明

  • do-whilewhile、for-eachdo-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特性对比与说明