配置并使用节点上下文参数

节点上下文参数是 DataWorks 中实现任务节点间动态数据传递的核心机制。它允许一个上游节点(生产者)将其输出值传递给一个或多个下游节点,下游节点接收到这些值后,可以在其代码逻辑中引用,从而根据上游的输出动态调整自身的行为。这极大地增强了工作流的灵活性和自动化能力。

工作原理

节点上下文参数通过在上游节点(提供方)定义输出参数,在下游节点(使用方)引用该参数,实现值的传递。

image
  • 上游节点(提供方):负责生成一个值并将其作为输出参数。提供值的方式有两种:

    • 传递常量或变量:在上游节点的节点输出参数区域,定义参数并为其赋值。值可以是常量(如 'abc')或系统上下文变量(如 ${status})。

    • 传递赋值结果:系统将节点代码(如 SELECT 'table_A';)的最后一行查询结果,捕获并赋值给一个内置的输出参数 outputs,然后将这个参数的值传递给下游节点。参数值取决于代码的运行结果。赋值节点和部分 SQL 类节点支持此方式。

  • 下游节点(使用方):接收并使用上游节点提供的值。

    1. 配置输入参数:在下游节点的节点输入参数区域,添加输入参数,并将其取值来源设置为上游节点的输出参数。

    2. 建立调度依赖:配置输入参数后,系统会自动建立下游节点对上游节点的同周期调度依赖。

    3. 在代码中引用:在下游节点的代码中,通过 ${输入参数名} 的格式引用接收到的值。例如,若上游节点传递了值 table_A,下游代码中的 SELECT * FROM ${input}; 在运行时会变为 SELECT * FROM table_A;

使用限制

  • 产品版本:部分节点支持添加赋值参数功能(用于传递查询结果),此功能需DataWorks标准版及以上版本。

  • 节点类型:支持添加赋值参数功能的节点类型有: EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL、ClickHouse SQL 和数据库节点类型。

操作步骤

步骤一:配置上游节点以输出参数

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

  2. 数据开发面板,双击打开目标上游节点的编辑页面。

  3. 单击画布右侧的调度配置,在节点上下文参数区域,根据业务需求,选择一种方式配置节点输出参数

方式一:传递常量或变量

  1. 本节点输出参数区域,单击添加参数

  2. 配置参数信息。

    参数

    配置说明

    参数名

    自定义输出参数的名称,例如 my_param

    参数值

    设置参数的值。支持以下几种类型:

方式二:传递赋值结果

  1. 使用赋值节点

    赋值节点(即上游节点)支持 MaxCompute SQLPython 2Shell三种语言,会自动将最后一条查询或输出结果赋值给节点的输出参数(outputs),下游节点可以通过引用该参数来获取赋值节点的输出结果。详情参见:赋值节点

  2. 使用赋值参数

    在支持赋值参数的节点中执行以下操作:

    image

    1. 节点输出参数区域,单击添加赋值参数

    2. 系统会自动添加名为 outputs 的输出参数。该参数无需配置,其值是本节点代码的最后一行查询结果。

    3. 单击保存

      说明

      添加赋值参数后,赋值参数会将本节点查询结果传递到引用该赋值参数的下游节点。如果产生结果为空,不会阻塞本节点运行,但下游引用的节点可能会失败。

    具体使用方式可类比赋值节点中的MaxCompute语言使用方式。

重要

输出参数支持删除操作。删除输出参数时,请确保下游节点不再使用该参数,否则将影响下游任务运行。

步骤二:配置下游节点以使用参数

  1. 配置输入参数

    1. 打开下游节点的编辑页面,进入调度配置 > 节点上下文参数 配置页面。在节点输入参数区域,单击添加参数

    2. 配置输入参数,从上游节点的输出参数中选择一个作为本参数的取值来源,并为本节点定义一个参数名

    3. 单击工作栏的保存完成参数添加。

  2. 建立依赖关系

    绑定上游节点的输出参数后,系统会自动添加对该节点的同周期依赖,无需手动配置。

  3. 引用参数

    在下游节点的代码中,通过 ${输入参数名} 的格式引用参数。

    以下为 Shell 节点引用输入参数 param 的示例:

    echo "The value from upnode is ${param}"

    若上游节点使用赋值结果传递给下游,参数值通常为二维数组或通过逗号分隔的一维数组,可参考以下方式获取数组内的值:

    • 若上游为SQL节点(二维数组):

      • 行:${param[i]}

      • 单元格: ${param[i][j]}

    • 若上游为Python/Shell (一维数组):
      行:${param[i]}

    索引均从0开始。

步骤三:调试运行

上下文参数仅在工作流触发的周期实例中按调度顺序传递。单独运行下游节点无法获取上游参数,会导致任务失败。调试时,应从上游节点开始,按业务流程顺序执行。

  1. 返回工作流,单击工作流上方工具栏的运行,或右键单击下游节点,选择运行到该节点

  2. 在生成的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}

节点名称。