添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
配置for-each节点

配置for-each节点

DataWorks 为您提供遍历节点(for-each 节点),您可以通过 for-each 节点来循环遍历赋值节点传递的结果集。同时您也可以重新编排 for-each 节点内部的业务流程。本文以一个具体示例,通过 for-each 节点 2 次循环遍历赋值节点输出结果,并在每次循环遍历时打印当前循环次数,为您介绍 for-each 节点的逻辑原理与操作流程。

前提条件

在配置节点前,请先了解相关介绍,避免任务配置过程出错。详情请参见 for-each 节点逻辑原理介绍

操作流程

使用遍历节点时,通常与赋值节点一起使用,操作流程如下所示。

遍历节点

  1. 设置节点依赖关系

    for-each 遍历节点需要依赖赋值节点。配置详情可参考文档: 创建和配置业务流程

  2. 赋值结果集

    赋值节点自带的 节点上下文 输出参数 outputs ,需作为 for-each 遍历节点的 节点上下文 输入参数。配置详情可参考文档: 配置赋值节点

  3. 遍历节点的内部节点获取参数

    根据业务需求自定义 for-each 遍历节点的内部业务流程,并在内部流程的节点中通过内置变量来获取所需参数值,运行循环遍历任务。内置变量的详情请参见 内置变量 ,配置详情请参见 配置 for-each 节点

  4. 遍历节点不支持在 DataStudio 测试

    请进入 运维中心 操作,需要右键查看内部节点来查看详细执行过程。详情请参见 测试并查看测试结果

    说明

    在运维中心执行任务时,选择 补数据 功能,并同时选中执行赋值节点与遍历节点,单独运行遍历节点将无法获取到赋值节点传递的值。

创建和配置业务流程

您需要创建一个上游为赋值节点,下游为 for-each 节点的业务流程:

  1. 进入数据开发页面。

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

  2. 创建周期业务流程

  3. 创建 for-each 节点。

    1. 鼠标悬停至 新建 图标,单击 新建节点 > 通用 > for-each

      您也可以找到相应的业务流程,右键单击 通用 ,选择 新建节点 > for-each

    2. 新建节点 对话框中,输入节点名称、路径等信息。

    3. 单击 确认

  4. 创建赋值节点。

    1. 双击业务流程,进入业务流程的编辑页面,单击 +新建节点 ,将 通用 > 赋值节点 拖拽至右侧的编辑区域。

      赋值节点的介绍请参见 赋值节点 赋值

    2. 新建节点 对话框中,输入节点名称、路径(默认在当前业务流程目录下)。

    3. 单击 确认

  5. 通过拖拽连线,设置赋值节点为 for-each 节点的上游节点。

    依赖

配置赋值节点

  1. 双击赋值节点名称,进入节点的编辑页面。

  2. 请选择赋值语言 列表中,选中 SHELL

  3. 在节点编辑页面,输入以下语句。

    echo 'this is name,ok';
  4. 单击节点编辑页面右侧的 调度配置 ,在 节点上下文参数 > 本节点输出参数 区域查看默认输出的 outputs 参数。

    outputs

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

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

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

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

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

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

配置 for-each 节点

  1. 双击 for-each 节点,进入节点编辑页面,默认包含 start、shell end 三个节点。

    您可根据需求,替换 Shell 节点为其他节点:

    • 如需使用 Shell 节点,则直接配置 Shell 节点即可。

    • 如果您需要使用其它类型的节点,请先删除默认的 Shell 节点,再创建其他类型节点。

    本文示例使用 Shell 节点。

  2. 编辑 Shell 节点。

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

    2. 输入以下代码。

      echo ${dag.loopTimes} ----打印循环的次数。
      说明
      • for-each 节点的 start 节点和 end 节点的逻辑是固定的,不可以编辑。

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

      for-each 节点支持以下四种环境变量:

      • ${dag.foreach.current} :当前遍历到的数据行。

      • ${dag.loopDataArray} :输入的数据集。

      • ${dag.offset} :偏移量。

      • ${dag.loopTimes} :当前循环次数,值为 ${dag.offset}+1

      变量详情请参见 内置变量 内置变量取值案例

  3. 配置 for-each 节点。

    1. for-each 节点的编辑页面,单击右侧的 调度配置

    2. 节点上下文参数 > 本节点输入参数 区域,单击默认参数名 loopDataArray 后的 编辑

    3. 取值来源 列表中,选择上游赋值节点的 outputs 参数,单击 保存

      outputs

      说明

      您在调度配置中添加上游赋值节点的依赖关系后,请手动添加取值来源。如果未添加取值来源,提交节点时会报错。

  4. 单击工具栏的 保存 图标,保存 for-each 节点。

  5. 单击工具栏的 提交 图标,提交 for-each 节点。

    重要

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

    提交 对话框中,选中需要提交的节点,单击 确定

    如果您使用的是标准模式的工作空间,提交成功后,请单击右上方的 发布 。具体操作请参见 发布任务

测试并查看测试结果

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

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

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

    补数据

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

  5. 右键单击赋值节点,选中 查看运行日志 ,确认赋值结果。

    赋值节点结果

  6. 补数据实例 页面,右键单击遍历节点,选中 查看内部节点

    内部节点

  7. 在内部节点页面,单击左侧的 1 ,并右键单击 Shell 节点,选中 查看运行日志

    运行日志

    在运行日志页面,查看第 1 次循环时,Shell 节点的日志。 1

  8. 以同样的方式,查看第 2 次循环时,Shell 节点的日志。

    2