本文为您介绍如何通过for-each节点实现循环2次,每次循环中把当前的循环次数打印出来的需求。
背景信息
- 您需要购买DataWorks标准版及以上版本,才可以使用for-each节点。
- for-each节点最多可以循环128次,一旦超过便会报错。
- 如果for-each节点内部需要进行逻辑判断和结果遍历,您可以使用分支节点。但是在遍历节点内部,分支节点需要和归并节点同时使用。
- for-each节点不支持在DataStudio界面直接运行。您需要提交和发布节点后,在运维中心页面配合赋值节点运行。
创建和配置业务流程
您需要创建一个上游为赋值节点,下游为for-each节点的业务流程:
- 进入数据开发页面。
- 登录DataWorks控制台。
- 在左侧导航栏,单击工作空间列表。
- 选择工作空间所在地域后,单击相应工作空间后的进入数据开发。
- 创建业务流程。
- 鼠标悬停至
图标,单击业务流程。
- 在新建业务流程对话框中,输入业务名称和描述。
注意 业务名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。
- 单击新建。
- 鼠标悬停至
- 创建for-each节点。
- 鼠标悬停至
图标,单击通用 > for-each。
您也可以找到相应的业务流程,右键单击通用,选择新建 > for-each。 - 在新建节点对话框中,输入节点名称,并选择目标文件夹。
注意 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。
- 单击提交。
- 鼠标悬停至
- 创建赋值节点,赋值节点的详情请参见配置赋值节点。
- 在业务流程的编辑页面,鼠标单击通用 > 赋值节点并拖拽至右侧的编辑页面。
- 在新建节点对话框中,输入节点名称,并选择目标文件夹(默认在当前业务流程目录下)。
注意 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。
- 单击提交。
- 在业务流程的编辑页面,鼠标单击通用 > 赋值节点并拖拽至右侧的编辑页面。
- 通过拖拽连线,设置赋值节点为for-each节点的上游节点。
配置赋值节点
- 双击赋值节点名称,打开节点的编辑页面。
- 从请选择赋值语言列表中,选中SHELL。
- 在节点的编辑页面,输入以下语句。
echo 'this is name,ok';
- 单击节点编辑页面右侧的调度配置,在节点上下文 > 本节点输出参数区域查看默认输出的outputs参数。
- 单击工具栏中的
图标,保存赋值节点。
- 提交赋值节点。
注意 您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
- 单击工具栏中的
图标。
- 在提交新版本对话框中,输入备注。
- 单击确认。
如果您使用的是标准模式的工作空间,提交成功后,请单击右上角的发布。具体操作请参见发布任务。 - 单击工具栏中的
配置for-each节点
- 双击打开for-each节点的编辑页面,默认有start、sql和end三个节点。
- 删除sql节点。
您可以根据自身需求,选择第2个节点为不同的类型:
- 如果您需要使用ODPS SQL节点,请跳过此步骤。
- 如果您需要使用其它类型的节点(本文以使用Shell节点为例),请先删除默认产生的sql节点。
- 右键单击处于for-each节点中间的sql节点,单击删除节点。
- 在删除对话框中,单击确定。
- 创建并编辑Shell节点。
您可以通过同样的方式,新建不同类型的节点。如果您使用的是默认的sql节点,请跳过此步骤。
- 鼠标单击通用 > Shell并拖拽至右侧的编辑页面。
- 在新建节点对话框中,输入节点名称。
注意 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。
- 单击提交。
- 在for-each节点的编辑页面,通过拖拽连线,设置Shell节点的上游为start节点,下游为end节点。
- 双击Shell节点,进入Shell节点的编辑页面。
- 输入以下代码。
echo ${dag.loopTimes} ----打印循环的次数。
说明- for-each节点的start节点和end节点的逻辑是固定的,不可以进行编辑。
- Shell节点中的代码修改后请务必保存,提交时不会进行提示。如果未保存,最新的代码不能及时更新。
for-each节点支持以下四种环境变量:- ${dag.foreach.current}:当前遍历到的数据行。
- ${dag.loopDataArray}:输入的数据集。
- ${dag.offset}:偏移量。
- ${dag.loopTimes}:当前循环次数,值为${dag.offset}+1。
// 以常见的for循环代码进行类比。 data=[] // 相当于${dag.loopDataArray}。 // i相当于${dag.offset}。 for(int i=0;i<data.length;i++) { print(data[i]); // data[i]相当于${dag.foreach.current}。 }
- 鼠标单击通用 > Shell并拖拽至右侧的编辑页面。
- 配置for-each节点。
- 在for-each节点的编辑页面,单击右侧的调度配置。
- 在节点上下文 > 本节点输入参数区域,单击默认参数名loopDataArray后的编辑。
- 从取值来源列表中,选择上游赋值节点的outputs参数。
说明 您在调度配置中添加上游赋值节点的依赖关系后,请手动添加取值来源。如果未添加取值来源,提交节点时会报错。
- 单击保存。
- 单击工具栏中的
图标,保存for-each节点。
- 提交for-each节点。
注意 您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
- 单击工具栏中的
图标。
- 在提交对话框中,选中需要提交的节点,输入备注。
- 单击提交。
如果您使用的是标准模式的工作空间,提交成功后,请单击右上方的发布。具体操作请参见发布任务。 - 单击工具栏中的
- 测试节点,并查看结果。
- 单击页面右上方的运维,进入运维中心。
- 在左侧导航栏,单击周期任务运维 > 周期任务。
- 选中相应的节点,在右侧的DAG图中,右键单击赋值节点,选中补数据 > 当前节点及下游节点。
- 刷新补数据实例页面,待补数据实例运行成功后,单击实例后的DAG图。
- 右键单击赋值节点,选中查看运行日志,确认赋值结果。
- 在补数据实例页面,右键单击遍历节点,选中查看内部节点。
- 在内部节点页面,单击左侧的第1次,并右键单击Shell节点,选中查看运行日志。
在运行日志页面,查看第1次循环时,Shell节点的日志。
- 以同样的方式,查看第2次循环时,Shell节点的日志。
在文档使用中是否遇到以下问题
更多建议
匿名提交