节点上下文参数是 DataWorks 中实现任务节点间动态数据传递的核心机制。它允许一个上游节点(生产者)将其输出值传递给一个或多个下游节点,下游节点接收到这些值后,可以在其代码逻辑中引用,从而根据上游的输出动态调整自身的行为。这极大地增强了工作流的灵活性和自动化能力。
工作原理
节点上下文参数通过在上游节点(提供方)定义输出参数,在下游节点(使用方)引用该参数,实现值的传递。
上游节点(提供方):负责生成一个值并将其作为输出参数。提供值的方式有两种:
传递常量或变量:在上游节点的节点输出参数区域,定义参数并为其赋值。值可以是常量(如
'abc')或系统上下文变量(如${status})。传递赋值结果:系统将节点代码(如
SELECT 'table_A';)的最后一行查询结果,捕获并赋值给一个内置的输出参数outputs,然后将这个参数的值传递给下游节点。参数值取决于代码的运行结果。赋值节点和部分 SQL 类节点支持此方式。
下游节点(使用方):接收并使用上游节点提供的值。
配置输入参数:在下游节点的节点输入参数区域,添加输入参数,并将其取值来源设置为上游节点的输出参数。
建立调度依赖:配置输入参数后,系统会自动建立下游节点对上游节点的同周期调度依赖。
在代码中引用:在下游节点的代码中,通过
${输入参数名}的格式引用接收到的值。例如,若上游节点传递了值table_A,下游代码中的SELECT * FROM ${input};在运行时会变为SELECT * FROM table_A;。
使用限制
产品版本:部分节点支持添加赋值参数功能(用于传递查询结果),此功能需DataWorks为标准版及以上版本。
节点类型:支持添加赋值参数功能的节点类型有: EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL、ClickHouse SQL 和数据库节点类型。
操作步骤
步骤一:配置上游节点以输出参数
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入Data Studio。
在数据开发面板,双击打开目标上游节点的编辑页面。
单击画布右侧的调度配置,在节点上下文参数区域,根据业务需求,选择一种方式配置节点输出参数。
方式一:传递常量或变量
方式二:传递赋值结果
使用赋值节点
赋值节点(即上游节点)支持 MaxCompute SQL、Python 2和Shell三种语言,会自动将最后一条查询或输出结果赋值给节点的输出参数(outputs),下游节点可以通过引用该参数来获取赋值节点的输出结果。详情参见:赋值节点。
使用赋值参数
在支持赋值参数的节点中执行以下操作:

在节点输出参数区域,单击添加赋值参数。
系统会自动添加名为
outputs的输出参数。该参数无需配置,其值是本节点代码的最后一行查询结果。单击保存。
说明添加赋值参数后,赋值参数会将本节点查询结果传递到引用该赋值参数的下游节点。如果产生结果为空,不会阻塞本节点运行,但下游引用的节点可能会失败。
具体使用方式可类比赋值节点中的MaxCompute语言使用方式。
输出参数支持删除操作。删除输出参数时,请确保下游节点不再使用该参数,否则将影响下游任务运行。
步骤二:配置下游节点以使用参数
配置输入参数
打开下游节点的编辑页面,进入 配置页面。在节点输入参数区域,单击添加参数。
配置输入参数,从上游节点的输出参数中选择一个作为本参数的取值来源,并为本节点定义一个参数名。
单击工作栏的保存完成参数添加。
建立依赖关系
绑定上游节点的输出参数后,系统会自动添加对该节点的同周期依赖,无需手动配置。
引用参数
在下游节点的代码中,通过
${输入参数名}的格式引用参数。以下为 Shell 节点引用输入参数
param的示例:echo "The value from upnode is ${param}"若上游节点使用赋值结果传递给下游,参数值通常为二维数组或通过逗号分隔的一维数组,可参考以下方式获取数组内的值:
若上游为SQL节点(二维数组):
行:
${param[i]}。单元格:
${param[i][j]}。
若上游为Python/Shell (一维数组):
行:${param[i]}。
索引均从0开始。
步骤三:调试运行
上下文参数仅在工作流触发的周期实例中按调度顺序传递。单独运行下游节点无法获取上游参数,会导致任务失败。调试时,应从上游节点开始,按业务流程顺序执行。
返回工作流,单击工作流上方工具栏的运行,或右键单击下游节点,选择运行到该节点。
在生成的DAG实例图中,单击节点查看运行日志,并检查结果是否符合预期。
系统上下文变量
系统变量 | 说明 |
${projectId} | 项目ID。 |
${projectName} | MaxCompute项目名。 |
${nodeId} | 节点ID。 |
${gmtdate} | 实例定时时间所在天的00:00:00,格式为yyyy-MM-dd 00:00:00。 |
${taskId} | 任务实例ID。 |
${seq} | 任务实例序号,代表该实例在当天同节点实例中的序号。 |
${cyctime} | 实例定时时间。 |
${status} | 实例的状态:成功(SUCCESS)、失败(FAILURE)。 |
${bizdate} | 业务日期。 |
${finishTime} | 实例结束时间。 |
${taskType} | 实例运行类型:正常(NORMAL)、手动(MANUAL)、暂停(PAUSE)、空跑(SKIP)、未选择(UNCHOOSE)、周月空跑(SKIP_CYCLE)。 |
${nodeName} | 节点名称。 |