配置do-while节点

DataWorks为您提供循环节点(do-while节点),您可以重新编排do-while节点内部的业务流程,将需要循环执行的逻辑写在节点内,再编辑end循环判断节点来控制是否退出循环。同时您也可以结合赋值节点来循环遍历赋值节点传递的结果集。本文通过实现简单和复杂场景的示例,为您介绍如何配置do-while节点。

前提条件

  • 已了解循环节点内部可根据业务需要自定义待循环的业务流程。节点组成与流程编排

  • 已了解循环节点内部可通过变量获取循环相关参数。详情请参见内置变量

  • 已了解循环节点的内部节点中Start节点代表循环开始,End节点用于自行定义循环退出逻辑。详情请参见退出循环示例:End节点代码样例

  • 已了解循环节点测试与日志查看注意事项。详情请参见注意事项

使用限制

  • 仅DataWorks标准版及以上版本支持使用do-while节点。详情请参见DataWorks各版本详解

  • do-while节点循环次数上限为1024次。

  • 不支持并发执行。即上次循环完成后才可进入下一次循环。

创建do-while节点

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与治理 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 创建do-while节点。

    1. 数据开发页面,鼠标悬停至新建图标,单击新建节点 > 通用 > do-while

      您也可以打开相应的业务流程,右键单击通用,选择新建节点 > do-while

    2. 新建节点对话框中,输入节点名称及路径。

    3. 单击确认

应用示例

本节为您介绍如何使用循环节点循环5次,并在每次循环中打印出当前的循环次数的端到端操作步骤。简单示例

编辑节点业务代码

说明

do-while节点默认包含StartShellEnd三个节点:

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

  • Shell节点是DataWorks提供的一个业务处理节点示例。

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

您也可根据业务背景自定义do-while节点内部业务流程,将中间的Shell节点替换为其他节点。

  1. 双击Shell节点,进入节点的编辑页面。

  2. 输入以下代码。

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

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

    打印循环次数

定义退出循环条件

定义当循环第5次时退出循环。

  1. 双击End节点,进入节点的编辑页面。

  2. 请选择赋值语言下拉列表中,选中Python

  3. 输入以下代码,定义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节点

  1. 单击工具栏中的保存图标,保存节点。

  2. 单击工具栏中的提交图标,提交节点。

    提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。

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

    • 代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审

    如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务

测试并查看执行日志

do-while节点提交发布流程与普通节点一致,线上执行流程与普通节点一致,但不支持数据开发界面测试。

说明

DataWorks为标准模式时,不支持在DataStudio界面直接测试运行do-while节点。

如果您想测试验证do-while节点的运行结果,您需要将包含do-while节点的任务发布提交到运维中心,在运维中心页面运行do-while节点任务。如果您在do-while节点内使用了赋值节点传递的值,请在运维中心测试时,同时运行赋值节点和循环节点。

  1. 单击页面右上方的运维,进入运维中心

  2. 在左侧导航栏,单击周期任务运维 > 周期任务

  3. 选中相应节点,在右侧的DAG图中,右键单击赋值节点,选中补数据 > 当前节点及下游节点

  4. 刷新补数据实例页面,待补数据实例运行成功后,单击实例后的DAG图

  5. 查看循环节点执行日志。

    1. 右键单击do-while节点,选中查看内部节点

      循环节点这类组合节点需要查看内部节点才能看到具体执行日志。内部循环体

      do-while节点的内部循环体分以下三部分:

      • 视图左侧为do-while节点的重跑历史列表,只要do-while实例整体运行一次,历史列表便会产生一条相应的记录。

      • 视图中部为循环记录列表,会列出当前do-while节点共运行多少次循环,以及每次循环的状态。

      • 视图右侧为每次循环的具体信息,单击循环记录列表中的某次循环,即可展示出该循环每个实例的运行情况。

    2. 在内部节点页面,单击左侧的次数,并右键单击相应节点,选中查看运行日志

    3. 查看第N次循环的详细执行日志。

      在内部节点页面,单击左侧的第5次,查看第5次循环Shell节点的日志。

      执行日志

      由该示例可见,do-while节点的工作流程如下:

      1. 从Start节点开始运行。

      2. 按照定义的任务依赖关系依次运行每个任务。

      3. 在End节点中定义循环的结束条件。

      4. 一组任务运行完毕之后,运行End的结束条件语句。

      5. 如果End的判断语句在日志中打印True,则从1开始继续下一个循环。

      6. 如果End的判断语句在日志中打印False,则退出整个循环,do-while节点整体结束。

总结

  • do-while与while、for-each和do-while三种循环类型对比如下:

    • do-while能够实现先循环再判断的循环体,即do…while语句,能够通过系统的变量dag.offset结合节点上下文间接实现foreach语句。

    • do-while不能实现先判断再循环的方式,即while语句。

  • do-while运行流程:

    1. 从Start开始按任务依赖关系依次运行循环体中的任务。

    2. 运行用户在End节点中定义的代码。

      • 如果End节点输出True,则继续下一个循环。

      • 如果End节点输出False,则终止循环。

  • 如何使用上下文依赖:do-while的内部节点可以通过${dag.上下文变量名}的方式引用到do-while节点定义的节点上下文。

  • 系统参数:DataWorks会为do-while内部节点自动下发两个系统变量。

    • dag.loopTimes:从1开始标识这一次循环的次数。

    • dag.offset:从0开始标识该次循环相对于第一次循环的次数偏移量。