跨节点输出参数赋值

跨节点参数功能,允许任务间传递消息。输出节点(如SQL、Shell、Python任务)能输出参数,输入节点可以接收并使用这些参数,解决了通过公共存储中转消息的复杂性和低效问题。本文将为您介绍如何为跨节点输出参数赋值。

背景介绍

Dataphin的节点(任务)依赖关系构成了一个有向无环图(DAG)。在过去,DAG的节点之间只能传递状态信息,即上游节点的运行状态会影响其下游节点,而系统对节点自身的运行内容并不感知,也无法通过DAG将这些内容向下传递。如果下游节点需要消费上游节点的产出,必须依赖上游节点将产出写入公共存储,随后下游节点再从公共存储中读取,最常用的公共位置为数据表。然而,通过公共存储中转消息存在以下不足:

  • 公共存储的写入和读取操作流程相对复杂,某些类型的节点甚至无法进行操作。例如,逻辑表节点的计算逻辑完全由字段计算逻辑决定,因此无法单独读取公共存储中的消息。

  • 将消息写入公共存储并进行读取的效率较低;若存在多个下游节点需要使用该消息,则每个节点均需独立读取消息。此外,若消息的存储位置或格式发生变更,所有下游节点都需同步调整其读取方式。

  • 中转的消息通常非常短小,通过中转方式传递比较繁重。

为了解决以上问题,Dataphin引入了跨节点参数来在节点(任务)间传递消息。

  • 输出节点:输出参数(向外传递消息)的节点。仅支持SHELL、PYTHONSQL(包括 MAX_COMPUTE_SQL、HIVE_SQL、ADB_PG_SQL等)类型的计算任务输出参数。

  • 输入节点:接收并使用参数的节点。一个输出节点可以连接多个输入节点,只要是输出节点的直接下游节点,都可以引用输出节点的跨节点参数。

跨节点输出参数赋值说明

在跨节点输出参数中声明跨节点输出参数后, 可在代码中对参数赋值。实际使用可参考跨节点参数最佳实践

重要
  • 仅支持SHELL、PYTHONSQL计算任务定义跨节点输出参数。

  • 集成任务、计算任务、普通/层级维度逻辑表、事实逻辑表的输入参数支持跨节点变量参数。

任务类型

赋值语句

右键菜单快捷方式

Shell任务

在代码中通过以下命令对跨节点参数赋值:

setv "{参数名称}" {参数值}

例如:

setv "output_variable" 123

重要
  • setv"{variable_name}" {value}在代码中对跨节点参数{variable_name}赋值,值为{value},setv是一个Shell函数,须遵循Shell的使用语法。

  • setv为系统保留函数,请避免命名冲突。

在编辑器中鼠标右键单击并选择设置跨节点参数image.png

Python任务

在代码中通过以下命令对跨节点参数赋值:

setv("{参数名称}", {参数值})

例如:

setv("output_variable", 123)

重要
  • setv"{variable_name}" {value}在代码中对跨节点参数{variable_name}赋值,值为{value},setv是一个Python函数,须遵循Python的使用语法。

  • setv为系统保留函数,请避免命名冲突。

在编辑器中鼠标右键单击并选择设置跨节点参数

image.png

SQL任务

set dataphin.task.result.type = dp_context_param;

select “value” as variable_name; 或其他查询语句,将取查询结果的第一行,字段名称为参数名,字段取值为参数值。

在编辑器中鼠标右键单击并选择设置跨节点参数

image.png

说明

ADB_PG_SQL任务不支持右键菜单快捷方式,请手动输入命令。