当您需要将上游节点任务的结果提供给下游节点使用时,您可使用赋值节点,实现任务结果在节点间传递。赋值节点支持ODPS SQL、SHELL和Python2三种赋值语言,且根据赋值规则,自动为您添加赋值参数(outputs参数),便于其他节点引用。您可以结合节点上下文配置,参考本文使用赋值节点。

前提条件

您已购买标准版及以上版本的DataWorks。

标准版及以上版本的DataWorks才支持使用赋值节点。

背景信息

使用赋值节点进行透传参数时,需关注以下三个要点:
  • 业务流程中,赋值节点与上下游节点间的依赖关系。赋值节点-上下游依赖如上图所示,使用赋值节点透传参数时:
    • 赋值节点(fuzhi_python、fuzhi_sql、fuzhi_shell)需作为引用赋值节点参数节点(down_compare)的上游节点,下游节点需要与赋值节点设置直接依赖关系(赋值节点为下游节点的一层父节点)。
    • 赋值节点作为上游与其它节点配合使用时,请务必先提交赋值节点,以便下游节点在配置时可以解析出参数。
  • 参数传递时,赋值节点与下游节点的上下文参数透传关系。
    参数透传如上图所示,通过赋值节点与引用节点的上下文参数的配置,形成参数透传引用关系:
    • 赋值节点(fuzhi_python、fuzhi_sql、fuzhi_shell)需将待赋值给下游的参数添加为节点上下文中的本节点输出参数
    • 下游引用赋值参数的节点需将待引用的赋值参数添加为节点上下文中的本节点输入参数
    说明
    • 部分数据开发节点,可直接在节点的上下游参数中手动添加赋值参数(outputs参数),无需通过赋值节点即可将参数透传给下游节点引用。例如,EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL和MySql节点,此类节点支持手动添加赋值节点,赋值参数的使用与赋值节点一致,添加赋值参数的操作详情请参见配置节点上下文
    • 其他节点无法直接在本节点中直接添加赋值参数,需要使用赋值节点进行参数透传。
    • 赋值节点参数传递只支持传递给一层子节点,不支持跨节点传递。
  • 如果下游需要取赋值节点传递结果,下游节点连同赋值节点一块执行,您可以业务流程面板运行或者在运维中心执行验证上下游参数传递情况。
  • 参数引用时,赋值节点的参数输出格式与下游节点引用参数方式的关系。
    不同语言的赋值参数(outputs参数)赋值说明如下。
    赋值语言outputs参数取值outputs参数格式outputs参数大小限制
    ODPS SQL最后一行SELECT语句的输出作为赋值参数,添加为赋值节点的本节点输出参数,供其他节点引用。将输出结果作为一个二维数组传递至下游。传递值最大为2 MB。如果赋值语句的输出结果超过该限制,赋值节点会运行失败。
    SHELL最后一行ECHO语句的数据,添加为赋值节点的本节点输出参数,供其他节点引用。将输出结果基于逗号(,)分割为一维数组。
    Python2最后一行PRINT语句的输出,添加为赋值节点的本节点输出参数,供其他节点引用。将输出结果基于逗号(,)分割为一维数组。

使用限制

  • 标准版及以上版本的DataWorks才支持使用赋值节点。
  • 若下游节点依赖赋值节点传递的结果集,请在执行时,同时执行赋值节点与下游节点以便赋值节点的输出的结果集可传递给下游。

操作流程

本文以在down_compare节点中,分别输出赋值节点使用Python2、ODPS SQL和SHELL语言编辑的最后一行代码输出结果为例,为您介绍赋值节点如何结合节点上下文实现上下游参数传递,操作流程如下。
  1. 创建赋值节点及其他节点
  2. 配置上下游依赖
  3. 配置上下文参数并引用赋值参数(ODPS SQL)
  4. 配置上下文参数并引用赋值参数(Python)
  5. 配置上下文参数并引用赋值参数(SHELL)
不同语言的赋值参数(outputs参数)使用案例如下。
赋值语言outputs取值示例赋值节点调度配置下游节点调度配置下游节点取值方式下游节点返回结果
ODPS SQL
示例查看fuzhi_tb表。
  • 查询代码:SELECT * FROM fuzhi_tb;
  • 显示结果。运行结果
  1. 赋值节点的调度配置 > 节点上下文默认生成一个本节点输出参数ouputsoutput
  2. 在节点编辑页面,单击提交图标提交节点。
配置节点上下文,详情请参见配置节点上下文
以上游赋值节点使用的赋值语言为ODPS SQL示例。
  1. 配置下游节点依赖上游赋值节点。调度依赖示例配置节点调度依赖,详情请参见配置同周期调度依赖
  2. 节点上下文添加本节点输入参数,参数命名为inputs_odps_sql节点上下文示例配置节点上下文,详情请参见配置节点上下文
不同类型的下游节点取值如下:
  • ODPS SQL:select '${inputs_odps_sql[0][0]}';
  • SHELL:echo '${inputs_shell[0]}';
  • Pyodps3:print ('${inputs_python[0]}');
Hello
SHELL示例语句为:echo 'Data','我是赋值节点2赋值语言shell';Data
Python2示例语句为:print "Works!,我是赋值节点3赋值语言是python";Works!

创建赋值节点及其他节点

根据本文的示例场景,需使用3个赋值节点,分别示例3种赋值语言场景的使用,因此您首先需要创建3个赋值节点。

  1. 登录DataWorks控制台
  2. 在左侧导航栏,单击工作空间列表
  3. 选择工作空间所在地域后,单击相应工作空间后的数据开发
  4. 鼠标悬停至新建图标,单击通用 > 赋值节点
    您也可以找到相应的业务流程,右键单击通用,选择新建 > 赋值节点
  5. 新建节点对话框中,输入节点名称,并选择目标文件夹
    本示例中新建3个不同语言的赋值节点(Python2、ODPS SQL和SHELL),节点名称分别为fuzhi_python、fuzhi_sql、fuzhi_shell。
    重要 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。
  6. 单击提交
重复上述步骤,创建完成所有的赋值节点,并根据实际情况,创建完成业务流程里的其他节点,例如本示例中,您还需创建上游start节点(虚拟节点)、下游down_compare节点(Shell节点),操作详情可参见虚拟节点Shell节点

配置上下游依赖

创建完成赋值节点(Python、ODPS SQL和SHELL)和其他节点后,您需要根据实际的业务关系,设置节点的上下游依赖关系。赋值节点-上下游依赖本示例中,您可以直接通过拉线,将start节点作为所有赋值节点的上游节点,down_compare节点作为所有赋值节点的下游节点,操作详情可参见配置同周期调度依赖

此外,您可根据实际需要配置各节点调度配置中的基础属性、时间属性、资源属性,详情可参见配置基础属性时间属性配置说明配置资源属性

配置上下文参数并引用赋值参数(ODPS SQL)

以下以配置赋值语言为ODPS_SQL的赋值节点,并在down_compare节点中引用赋值参数为例,为您示意如何操作。

  1. 配置赋值节点。
    1. 在相应的业务流程下,双击打开赋值语言为ODPS SQL的赋值节点fuzhi_sql
    2. 在代码编辑页面,选择赋值语言为ODPS_SQL,写入赋值代码。
      例如:
      select * from xc_dpe_e2.xc_rpt_user_info_d  where dt='20191008' limit 10;  
    3. 单击页面右侧的调度配置,查看节点上下文中的本节点输出参数
      赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs上游节点
  2. 配置引用节点。
    1. 双击打开下游Shell节点down_compare节点。
    2. 在代码开发页面编写代码。
      例如:
      echo '${sql_inputs}';
      echo '取上游sql节点输出第1行数据'${sql_inputs[0]};
      echo '取上游sql节点输出第2行数据'${sql_inputs[1]};
      echo '取上游sql节点输出第1行第2个字段'${sql_inputs[0][1]};
      echo '取上游sql节点输出第2行第3个字段'${sql_inputs[1][2]};
    3. 单击页面右侧的调度配置,配置节点上下文中的本节点输入参数
      将fuzhi_sql节点的outputs参数添加为本节点输入参数,并命名为sql_inputs
  3. 执行引用,查看引用结果。
    1. 单击工具栏中的运行图标。
    2. 警告对话框中,单击继续运行
    3. 查看引用结果。

配置上下文参数并引用赋值参数(Python)

以下以配置赋值语言为Python2的赋值节点,并在down_compare节点中引用赋值参数为例,为您示意如何操作。

  1. 配置赋值节点。
    1. 在相应的业务流程下,双击打开赋值语言为Python2的上游节点fuzhi_python
    2. 在代码编辑页面,选择赋值语言为Python2,写入赋值代码。
      例如:
      print "a,b,c";
    3. 单击页面右侧的调度配置,查看节点上下文中的本节点输出参数
      赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。本示例的查询结果为a,b,cPython

      赋值语言为Python2时,查询结果将基于逗号(,)分割为一维数组,赋值给本节点输出参数中的outputs参数。

  2. 配置引用节点。
    1. 双击打开下游Shell节点down_compare节点。
    2. 在代码开发页面编写代码。
      例如:
      echo '这是上游python节点的输出'${python_inputs};
      echo '取上游python节点输出的第1个数据'${python_inputs[0]};
      echo '取上游python节点输出的第2个数据'${python_inputs[1]};
    3. 单击页面右侧的调度配置,配置节点上下文中的本节点输入参数
      将fuzhi_python节点的outputs参数添加为本节点输入参数,并命名为python_inputs
  3. 执行引用,查看引用结果。
    1. 单击工具栏中的运行图标。
    2. 警告对话框中,单击继续运行
    3. 查看引用结果。

配置上下文参数并引用赋值参数(SHELL)

以下以配置赋值语言为SHELL的赋值节点,并在down_compare节点中引用赋值参数为例,为您示意如何操作。

  1. 配置赋值节点。
    1. 在相应的业务流程下,双击打开赋值语言为SHELL的上游节点fuzhi_shell
    2. 在代码编辑页面,选择赋值语言为SHELL,写入赋值代码。
      例如:
      echo "hello,world";
    3. 单击页面右侧的调度配置,查看节点上下文中的本节点输出参数
      赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。本示例的查询结果为hello,worldSHELL

      赋值语言为SHELL时,查询结果将基于逗号(,)分割为一维数组,赋值给本节点输出参数中的outputs参数。

  2. 配置引用节点。
    1. 双击打开下游Shell节点down_compare节点。
    2. 在代码开发页面编写代码。
      例如:
      echo '这是上游shell节点的输出'${shell_inputs};
      echo '取上游shell节点输出的第1个数据'${shell_inputs[0]};
      echo '取上游shell节点输出的第2个数据'${shell_inputs[1]};
    3. 单击页面右侧的调度配置,配置节点上下文中的本节点输入参数
      将fuzhi_shell节点的outputs参数添加为本节点输入参数,并命名为shell_inputs
  3. 执行引用,查看引用结果。
    1. 单击工具栏中的运行图标。
    2. 警告对话框中,单击继续运行
    3. 查看引用结果。