当您需要将上游节点任务的查询或输出结果提供给下游节点使用时,可通过赋值节点实现。赋值节点支持ODPS SQL、SHELL和Python三种赋值语言,将节点最后一条查询或输出结果自动赋值给节点自带的输出参数(outputs),便于赋值节点的下游节点引用。您可结合节点上下文配置,参考本文使用赋值节点。
注意事项
赋值节点功能说明
赋值节点参数传递只支持传递给一层子节点,不支持跨节点传递。
赋值节点只能将最后一条查询或输出结果通过自带输出参数传递给下游。
赋值节点的Python赋值语言使用的Python版本为Python 2.0。
赋值节点代码中不支持添加注释,添加注释可能导致运行结果有误。
赋值节点版本及赋值参数说明
为避免下游节点无法获取赋值节点的结果集,赋值节点及其下游节点配置完成后,请统一运行节点所在的业务流程。
本实验中的,您可通过ETL工作流模板快速体验本案例赋值节点参数的传递能力。
仅空间管理员角色可导入ETL模板至目标工作空间,为账号授权空间管理员角色详情请参见空间级模块权限管控。
导入ETL工作流模板,详情请参见导入ETL工作流模板。
ETL工作流模板快捷入口,请点击赋值节点应用。
原理介绍
在DataWorks中,节点上下文参数可实现节点参数的上下游传递,赋值节点在此基础上,可将赋值节点最后一条查询结果传递给自带的输出参数(outputs),若下游节点依赖了赋值节点,则下游节点可通过添加输入参数的方式,在节点代码中获取赋值节点输出参数(outputs)的结果集(即上游赋值节点的查询结果)。
赋值节点自带的输出参数(outputs)不可修改,outputs取值由赋值节点最后一条查询或输出结果决定。
赋值节点下游获取赋值节点结果集(outputs)时,需要先直接依赖赋值节点(即赋值节点为下游节点的一层父节点),并在节点输入参数处添加赋值节点结果集。您可自定义赋值节点结果集在下游节点的参数名称,例如上图中命名为sql_inputs。
不同赋值语言的赋值节点,其结果集格式存在差异。赋值节点下游获取赋值节点结果集outputs时,需要根据outputs具体情况,以${参数名}的格式,使用一维数组或二维数组的方式在代码中获取赋值节点传递的结果集、或结果集中的指定数据。
赋值节点使用流程
配置赋值节点:定义outputs结果集。此阶段您需要选择赋值语言,以及确定最后一条查询或输出结果。
配置上下游依赖:获取赋值节点结果集的下游节点需提前依赖该赋值节点。
下游引用赋值节点结果集:下游节点可通过
方式获取赋值节点结果集,并通过${参数名}的方式在代码中获取赋值节点结果集。若要获取结果集中的指定数据,您需根据赋值节点的赋值语言,通过一维数组或二维数组的方式获取。调试运行任务:您可运行业务流程,查看引用结果是否符合预期。
测试获取的赋值节点结果集:下游节点引用赋值节点结果集后,您可提交下游节点及赋值节点至开发环境运维中心测试引用结果是否正确。
赋值节点创建入口
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
进入节点创建入口。
在数据开发页面基于具体业务流程创建节点,并根据界面指引配置节点的名称、路径等基本信息。创建入口如下图。
本示例中新建3个不同语言的赋值节点(Python、ODPS SQL和SHELL),节点名称分别为fuzhi_python、fuzhi_sql、fuzhi_shell。
使用赋值节点时,不同赋值语言,其赋值参数(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节点中引用赋值参数为例,为您示意如何操作。
配置上游赋值节点。
在相应的业务流程下,双击打开赋值语言为ODPS SQL的赋值节点fuzhi_sql。
在代码编辑页面,选择赋值语言为ODPS_SQL,写入赋值代码。
示例如下。
select * from xc_dpe_e2.xc_rpt_user_info_d where dt='20191008' limit 10;
单击页面右侧的调度配置,查看节点上下文中的本节点输出参数。
赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。
本示例赋值节点的查询结果如下。则此查询结果作为一个二维数组,赋值给本节点输出参数中的outputs参数。
配置下游节点。
双击打开下游Shell节点down_compare。
在代码开发页面编写代码。
示例如下。
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]};
单击页面右侧的调度配置,配置节点上下文中的本节点输入参数。
将fuzhi_sql节点的outputs参数添加为本节点输入参数,并命名为sql_inputs。
示例返回的引用结果如下。
Python赋值语言
以下以配置赋值语言为Python的赋值节点,并在down_compare节点中引用赋值参数为例,为您示意如何操作。
配置上游赋值节点。
在相应的业务流程下,双击打开赋值语言为Python的上游节点fuzhi_python。
在代码编辑页面,选择赋值语言为Python,写入赋值代码。
例如:
print "a,b,c";
单击页面右侧的调度配置,查看节点上下文中的本节点输出参数。
赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。本示例的查询结果为a,b,c。
赋值语言为Python时,查询结果将基于逗号(,)分割为一维数组,赋值给本节点输出参数中的outputs参数。
配置下游节点。
双击打开下游Shell节点down_compare。
在代码开发页面编写代码。
例如:
echo '这是上游python节点的输出'${python_inputs}; echo '取上游python节点输出的第1个数据'${python_inputs[0]}; echo '取上游python节点输出的第2个数据'${python_inputs[1]};
单击页面右侧的调度配置,配置节点上下文中的本节点输入参数。
将fuzhi_python节点的outputs参数添加为本节点输入参数,并命名为python_inputs。
示例返回的引用结果如下。
SHELL赋值语言
以下以配置赋值语言为SHELL的赋值节点,并在down_compare节点中引用赋值参数为例,为您示意如何操作。
配置上游赋值节点。
在相应的业务流程下,双击打开赋值语言为SHELL的上游节点fuzhi_shell。
在代码编辑页面,选择赋值语言为SHELL,写入赋值代码。
例如:
echo "hello,world";
单击页面右侧的调度配置,查看节点上下文中的本节点输出参数。
赋值节点将代码的查询结果作为节点输出,赋值给赋值节点自带的输出参数outputs。本示例的查询结果为hello,world。
赋值语言为SHELL时,查询结果将基于逗号(,)分割为一维数组,赋值给本节点输出参数中的outputs参数。
配置下游节点。
双击打开下游Shell节点down_compare。
在代码开发页面编写代码。
例如:
echo '这是上游shell节点的输出'${shell_inputs}; echo '取上游shell节点输出的第1个数据'${shell_inputs[0]}; echo '取上游shell节点输出的第2个数据'${shell_inputs[1]};
单击页面右侧的调度配置,配置节点上下文中的本节点输入参数。
将fuzhi_shell节点的outputs参数添加为本节点输入参数,并命名为shell_inputs。
示例返回的引用结果如下。
下游获取赋值节点结果集:应用示例二
不同语言的赋值参数(output)使用示例如下。
赋值语言 | outputs取值示例 | 赋值节点调度配置 | 下游节点调度配置 | 下游节点取值方式 | 下游节点返回结果 |
ODPS SQL | 示例查看fuzhi_tb表。
|
配置节点上下文,详情请参见配置节点上下文。 | 以上游赋值节点使用的赋值语言为ODPS SQL示例。 | 不同类型的下游节点取值如下:
| Hello |
SHELL | 示例语句为: | Data | |||
Python | 示例语句为: | Works! |
调试运行任务
下游获取赋值节点结果集后,您可双击业务流程名称,在业务流程编辑页面单击工具栏的图标,运行业务流程,查看引用结果是否正确。
若赋值节点的下游是遍历节点(for-each节点)或循环节点(do-while节点),则您需前往运维中心执行相应任务,查看引用结果。
赋值节点结合遍历节点或循环节点使用的最佳实践,请参见配置使用for-each节点、配置使用do-while节点。
测试获取的赋值节点结果集
下游节点引用赋值节点结果集后,您可将下游节点及赋值节点提交至开发环境,并进入开发环境运维中心执行补数据操作,测试下游节点获取的赋值节点结果集数据是否正确。