当您需要将上游节点任务的查询或输出结果提供给下游节点使用时,可通过赋值节点实现。赋值节点支持ODPS SQL、SHELL和Python三种赋值语言,将节点最后一条查询或输出结果自动赋值给节点自带的输出参数(outputs),便于赋值节点的下游节点引用。您可结合节点上下文配置,参考本文使用赋值节点。
节点介绍
DataWorks中,节点上下文参数可实现节点参数的上下游传递,赋值节点在此基础上,可将赋值节点最后一条查询结果传递给自带的输出参数outputs
,若下游节点依赖了赋值节点,则下游节点可通过添加输入参数的方式,在节点代码中获取赋值节点输出参数outputs
的结果集。
赋值节点自带的输出参数
outputs
不可修改,outputs
取值由赋值节点最后一条查询或输出结果决定。赋值节点下游获取赋值节点结果集
outputs
时,需要直接依赖赋值节点,并在节点输入参数处添加赋值节点结果集。不同赋值语言的赋值节点,其结果集格式存在差异。赋值节点下游获取赋值节点结果集
outputs
时,需要根据outputs
具体情况,以${参数名}
的格式,使用一维数组或二维数组的方式在代码中获取赋值节点传递的结果集或结果集中的指定数据。
前提条件
RAM账号添加至对应空间(可选)。
进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员。
对应空间已绑定Serverless资源组。详情请参见:使用Serverless资源组。
进行赋值节点开发前,需创建对应的赋值节点,详情请参见:节点参考。
注意事项
赋值节点功能说明
赋值节点参数传递只支持传递给一层子节点,不支持跨节点传递。
赋值节点只能将最后一条查询或输出结果通过自带输出参数传递给下游。
赋值节点的Python赋值语言使用的Python版本为Python 2.0。
赋值节点代码中不支持添加注释,添加注释可能导致运行结果有误。
赋值节点版本及赋值参数说明。
部分节点可通过节点上下文中的赋值参数,达到与赋值节点相同的目的,赋值参数的使用与赋值节点一致,添加赋值参数的操作。
仅标准版及以上版本的DataWorks,才可使用赋值节点,以及在上述节点中使用赋值参数功能。购买DataWorks,请参见购买指引。
为避免下游节点无法获取赋值节点的结果集,赋值节点及其下游节点配置完成后,请统一运行节点所在的业务流程。
说明依赖赋值节点的下游节点均可获取赋值节点的查询结果(即结果集),无节点类型限制。
赋值节点输出格式
赋值节点支持ODPS SQL、SHELL和Python三种赋值语言,使用不同赋值语言时,赋值节点的参数(outputs)输出格式不同,下游节点需要根据outputs的具体情况,以${参数名}的格式,使用一维数组或二维数组的方式在代码中获取赋值节点传递的结果集或结果集中的指定数据。
赋值语言 | outputs参数取值 | outputs参数格式 | outputs参数大小限制 |
ODPS SQL | 最后一行SELECT语句的输出作为赋值参数,添加为赋值节点的本节点输出参数,供其他节点引用。 | 将输出结果作为一个二维数组传递至下游。 | 传递值最大为2MB。如果赋值语句的输出结果超过该限制,赋值节点会运行失败。 |
SHELL | 最后一行ECHO语句的数据,添加为赋值节点的本节点输出参数,供其他节点引用。 | 将输出结果基于逗号(,)分割为一维数组。 | |
Python | 最后一行PRINT语句的输出,添加为赋值节点的本节点输出参数,供其他节点引用。 | 将输出结果基于逗号(,)分割为一维数组。 |
步骤一:开发赋值节点
赋值节点目前支持的语言有ODPS SQL、Python、Shell语言,可通过赋值节点编辑页面右下角进行切换,详情可参考以下内容:
ODPS SQL赋值
赋值节点开发。
工作流中,单击赋值节点的打开节点,进入编辑赋值节点页面开发脚本代码。
SELECT * FROM 项目.表明 WHERE dt='分区值' LIMIT 10;
单击右侧调度配置,打开调度配置页面,切换至节点输出参数。即可查看赋值节点生成的
outputs
输出参数。说明outputs
作为赋值节点的输出参数,在输出参数的定义并提交当前节点后,即可在下游节点配置调度参数时,绑定上游节点的输出参数作为下游节点的输入参数,详情请参见调度参数。
下游节点开发。
在工作流单击打开赋值节点下游的Shell节点,进入节点页面开发脚本代码。
echo '${outputs}'; echo '取上游sql节点输出第1行数据'${outputs[0]}; echo '取上游sql节点输出第2行数据'${outputs[1]}; echo '取上游sql节点输出第1行第2个字段'${outputs[0][1]}; echo '取上游sql节点输出第2行第3个字段'${outputs[1][2]};
说明代码中的
outputs
为上游赋值节点的输出参数。
Python赋值
赋值节点开发。
打开已创建的赋值节点,并切换语言至Python,写入以下代码。
print "a,b,c";
单击右侧调度配置,打开调度配置页面,切换至节点输出参数。即可查看赋值节点生成的
outputs
输出参数。说明outputs
作为赋值节点的输出参数,在输出参数的定义并提交当前节点后,即可在下游节点配置调度参数时,绑定上游节点的输出参数作为下游节点的输入参数,详情请参见调度参数。
下游节点开发
在工作流单击打开赋值节点下游的Shell节点,进入节点页面开发脚本代码。
echo '这是上游python节点的输出'${python_inputs}; echo '取上游python节点输出的第1个数据'${python_inputs[0]}; echo '取上游python节点输出的第2个数据'${python_inputs[1]};
说明代码中的
outputs
为上游赋值节点的输出参数。
Shell赋值
赋值节点开发。
打开已创建的赋值节点,并切换语言至Shell,写入以下代码。
echo "hello,world";
单击右侧调度配置,打开调度配置页面,切换至节点输出参数。即可查看赋值节点生成的
outputs
输出参数。说明outputs
作为赋值节点的输出参数,在输出参数的定义并提交当前节点后,即可在下游节点配置调度参数时,绑定上游节点的输出参数作为下游节点的输入参数,详情请参见调度参数。下游节点开发
在工作流单击打开赋值节点下游的Shell节点,进入节点页面开发脚本代码。
echo '这是上游shell节点的输出'${shell_inputs}; echo '取上游shell节点输出的第1个数据'${shell_inputs[0]}; echo '取上游shell节点输出的第2个数据'${shell_inputs[1]};
说明代码中的
outputs
为上游赋值节点的输出参数。
完成赋值节点脚本开发后,需对赋值节点进行调度配置,以实现对赋值参数的向下传输,详情请参见调度配置。
步骤二:节点发布与运维
附录
附录一:调试运行任务
下游获取赋值节点结果集后,您可以在运维中心对该工作流进行测试,查看引用结果是否正确。
若赋值节点的下游是遍历节点(for-each节点)或循环节点(do-while节点),则您需前往运维中心执行相应任务,查看引用结果。
赋值节点结合遍历节点或循环节点使用的最佳实践,请参见for-each节点、do-while节点。
附录二:测试获取的赋值节点结果集
下游节点引用赋值节点结果集后,您可将下游节点及赋值节点提交至开发环境,并进入运维中心概述执行补数据操作,测试下游节点获取的赋值节点结果集数据是否正确。