赋值节点

当您需要将上游节点任务的查询或输出结果提供给下游节点使用时,可通过赋值节点实现。赋值节点支持ODPS SQL、SHELL和Python三种赋值语言,将节点最后一条查询或输出结果自动赋值给节点自带的输出参数(outputs),便于赋值节点的下游节点引用。您可结合节点上下文配置,参考本文使用赋值节点。

注意事项

  • 赋值节点功能说明

    • 赋值节点参数传递只支持传递给一层子节点,不支持跨节点传递。

    • 赋值节点只能将最后一条查询或输出结果通过自带输出参数传递给下游。

    • 赋值节点的Python赋值语言使用的Python版本为Python 2.0。

    • 赋值节点代码中不支持添加注释,添加注释可能导致运行结果有误。

  • 赋值节点版本及赋值参数说明

    • 部分节点可通过节点上下文中的赋值参数,达到与赋值节点相同的目的(例如,EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL和MySQL节点),赋值参数的使用与赋值节点一致,添加赋值参数的操作,详情请参见配置节点上下文

    • 仅标准版及以上版本的DataWorks,才可使用赋值节点,以及在上述节点中使用赋值参数功能。购买DataWorks,请参见购买指引

  • 为避免下游节点无法获取赋值节点的结果集,赋值节点及其下游节点配置完成后,请统一运行节点所在的业务流程。

    • 调试运行任务,请参见调试运行任务

    • 下游节点引用赋值节点结果集后,您可提交下游节点及赋值节点至开发环境运维中心,测试引用结果是否正确。详情请参见测试赋值节点结果集

      说明

      依赖赋值节点的下游节点均可获取赋值节点的查询结果(即结果集),无节点类型限制。本文主要以ODPS SQL 节点、以及Shell节点为例,为您介绍下游节点如何获取赋值节点的输出结果。

  • 本实验中的,您可通过ETL工作流模板快速体验本案例赋值节点参数的传递能力。

原理介绍

在DataWorks中,节点上下文参数可实现节点参数的上下游传递,赋值节点在此基础上,可将赋值节点最后一条查询结果传递给自带的输出参数(outputs),若下游节点依赖了赋值节点,则下游节点可通过添加输入参数的方式,在节点代码中获取赋值节点输出参数(outputs)的结果集(即上游赋值节点的查询结果)。image.png

  • 赋值节点自带的输出参数(outputs)不可修改,outputs取值由赋值节点最后一条查询或输出结果决定。

  • 赋值节点下游获取赋值节点结果集(outputs)时,需要先直接依赖赋值节点(即赋值节点为下游节点的一层父节点),并在节点输入参数处添加赋值节点结果集。您可自定义赋值节点结果集在下游节点的参数名称,例如上图中命名为sql_inputs。

  • 不同赋值语言的赋值节点,其结果集格式存在差异。赋值节点下游获取赋值节点结果集outputs时,需要根据outputs具体情况,以${参数名}的格式,使用一维数组二维数组的方式在代码中获取赋值节点传递的结果集、或结果集中的指定数据。

赋值节点使用流程

  1. 配置赋值节点:定义outputs结果集。此阶段您需要选择赋值语言,以及确定最后一条查询或输出结果。

  2. 配置上下游依赖:获取赋值节点结果集的下游节点需提前依赖该赋值节点。

  3. 下游引用赋值节点结果集:下游节点可通过节点上下文 > 添加节点输入参数方式获取赋值节点结果集,并通过${参数名}的方式在代码中获取赋值节点结果集。若要获取结果集中的指定数据,您需根据赋值节点的赋值语言,通过一维数组或二维数组的方式获取。

  4. 调试运行任务:您可运行业务流程,查看引用结果是否符合预期。

  5. 测试获取的赋值节点结果集:下游节点引用赋值节点结果集后,您可提交下游节点及赋值节点至开发环境运维中心测试引用结果是否正确。

赋值节点创建入口

  1. 进入数据开发页面。

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

  2. 进入节点创建入口。

    在数据开发页面基于具体业务流程创建节点,并根据界面指引配置节点的名称、路径等基本信息。创建入口如下图。

    本示例中新建3个不同语言的赋值节点(Python、ODPS SQL和SHELL),节点名称分别为fuzhi_python、fuzhi_sql、fuzhi_shell。

    image.png

    使用赋值节点时,不同赋值语言,其赋值参数(outputs)输出格式存在差异,详情请参见赋值节点输出格式

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

赋值节点输出格式

赋值节点支持ODPS SQL、SHELL和Python三种赋值语言,使用不同赋值语言时,赋值节点的参数(outputs)输出格式不同,下游节点需要根据outputs的具体情况,以${参数名}的格式,使用一维数组二维数组的方式在代码中获取赋值节点传递的结果集、或结果集中的指定数据。

赋值语言

outputs参数取值

outputs参数格式

outputs参数大小限制

ODPS SQL

最后一行SELECT语句的输出作为赋值参数,添加为赋值节点的本节点输出参数,供其他节点引用。

将输出结果作为一个二维数组传递至下游。

传递值最大为2MB。如果赋值语句的输出结果超过该限制,赋值节点会运行失败。

SHELL

最后一行ECHO语句的数据,添加为赋值节点的本节点输出参数,供其他节点引用。

将输出结果基于逗号(,)分割为一维数组。

Python

最后一行PRINT语句的输出,添加为赋值节点的本节点输出参数,供其他节点引用。

将输出结果基于逗号(,)分割为一维数组。

下游获取赋值节点结果集:应用示例一

本示例中,直接通过拉线,将start节点作为所有赋值节点的上游节点,down_compare节点作为所有赋值节点的下游节点,其中down_compare节点为Shell节点,以${参数名}的格式,使用一维数组二维数组的方式,通过Shell节点分别输出上游赋值语言分别为ODPS SQL(fuzhi_sql)、Python(fuzhi_python)、SHELL(fuzhi_shell)的结果集与结果集中的指定数据。参数透传

  • 赋值节点(fuzhi_python、fuzhi_sql、fuzhi_shell):自带输出参数outputs。

  • 下游节点(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

      本示例赋值节点的查询结果如下。查询结果则此查询结果作为一个二维数组,赋值给本节点输出参数中的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. 调试运行任务

    示例返回的引用结果如下。

    输出结果

Python赋值语言

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

  1. 配置上游赋值节点。

    1. 在相应的业务流程下,双击打开赋值语言为Python的上游节点fuzhi_python

    2. 在代码编辑页面,选择赋值语言为Python,写入赋值代码。

      例如:

      print "a,b,c";
    3. 单击页面右侧的调度配置,查看节点上下文中的本节点输出参数

      赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。本示例的查询结果为a,b,cPython

      赋值语言为Python时,查询结果将基于逗号(,)分割为一维数组,赋值给本节点输出参数中的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_inputsPython

  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_inputsSHELL

  3. 调试运行任务

    示例返回的引用结果如下。

    结果

下游获取赋值节点结果集:应用示例二

不同语言的赋值参数(output)使用示例如下。

赋值语言

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

Python

示例语句为:print "Works!,我是赋值节点3赋值语言是python";

Works!

调试运行任务

下游获取赋值节点结果集后,您可双击业务流程名称,在业务流程编辑页面单击工具栏的image图标,运行业务流程,查看引用结果是否正确。

说明

测试获取的赋值节点结果集

下游节点引用赋值节点结果集后,您可将下游节点及赋值节点提交至开发环境,并进入开发环境运维中心执行补数据操作,测试下游节点获取的赋值节点结果集数据是否正确。