You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
Activity (任务节点)类型
Set Variable(变量设置)
复制全文
下载 pdf
Set Variable(变量设置)

概述

Set Variable Activity(YAML 类型标识为 set_variable)在 Pipeline 执行过程中动态修改变量的值。支持两种用途:

  • PIPELINE_INNER:修改 Pipeline 内部变量,供后续 Activity 使用。
  • PIPELINE_OUTPUT:设置 Pipeline 的返回值,供父 Pipeline 或下游 Pipeline 获取。

适用场景:

  • 在 For Each / Do While 循环中更新计数器。
  • 根据前序节点的结果设置标志位。
  • 向父 Pipeline 返回执行结果(如处理的记录数、执行状态)。

设置内部变量 (PIPELINE_INNER)

直接赋值 (rawValue)

将变量设置为一个固定值或引用值:

- name: set_status
  type: set_variable
  variableType: PIPELINE_INNER
  variableName: process_status
  value:
    rawValue: "completed"
  position:
    x: "200"
    y: "100"
# 引用其他变量或参数的值
- name: copy_date
  type: set_variable
  variableType: PIPELINE_INNER
  variableName: current_date
  value:
    rawValue: "{{pipeline.parameters.biz_date}}"
  position:
    x: "200"
    y: "100"

计算赋值 (calculateValue)

通过计算表达式设置变量值:

- name: increment_counter
  type: set_variable
  variableType: PIPELINE_INNER
  variableName: attempt_count
  value:
    calculateValue:
      left: "{{variables.attempt_count}}"
      op: PLUS
      right: "1"
  position:
    x: "200"
    y: "100"

字段说明(PIPELINE_INNER)

字段

类型

必填

说明

type

String

固定为 set_variable

variableType

Enum

固定为 PIPELINE_INNER

variableName

String

目标变量名(需在 Pipeline variables 中预先定义)

value.rawValue

String

二选一

直接赋值:固定值或引用表达式

value.calculateValue

Object

二选一

计算赋值

value.calculateValue.left

String

左操作数

value.calculateValue.op

Enum

运算符

value.calculateValue.right

String

右操作数

calculateValue 运算符

op 值

含义

示例

PLUS

加法

5 + 16

MINUS

减法

10 - 37

CONCAT

字符串连接

"hello" + "_world""hello_world"

注意

左值和右值均为字符串类型。使用 PLUSMINUS 运算时,两侧值需可解析为数字。

设置 Pipeline 返回值 (PIPELINE_OUTPUT)

Pipeline 返回值用于向外部输出执行结果,父 Pipeline 的 Execute Pipeline 节点可获取这些值。

- name: set_output
  type: set_variable
  variableType: PIPELINE_OUTPUT
  outputVariables:
    - name: total_records
      description: "本次处理的总记录数"
      default: "{{variables.record_count}}"
    - name: status
      description: "执行状态"
      default: "success"
    - name: output_table
      description: "输出表名"
      default: "dw.order_summary"
  position:
    x: "600"
    y: "100"

字段说明(PIPELINE_OUTPUT)

字段

类型

必填

说明

type

String

固定为 set_variable

variableType

Enum

固定为 PIPELINE_OUTPUT

outputVariables

Array

返回值列表

outputVariables[].name

String

返回值名称

outputVariables[].description

String

返回值描述

outputVariables[].default

String

返回值内容(支持变量引用)

在父 Pipeline 中引用返回值

子 Pipeline 通过 PIPELINE_OUTPUT 设置的返回值,可在父 Pipeline 的后续节点中引用:

# 父 Pipeline 中引用子 Pipeline 的返回值
parameterValues:
  upstream_count: "{{activities.run_sub_pipeline.output.total_records}}"
  upstream_status: "{{activities.run_sub_pipeline.output.status}}"

注意

父 Pipeline 的 Execute Pipeline 节点需设置 waitingSuccess: true 才能获取返回值。

典型使用场景

场景一:Do While 循环计数器

variables:
  - name: loop_count
    type: Integer
    defaultValue: "0"

activities:
  - name: loop_task
    type: do_while
    condition:
      left: "{{variables.loop_count}}"
      op: LESS_THAN
      right: "10"
    activities:
      - name: do_work
        type: sql
        source: WORKSPACE
        path: /Workspace/Users/zhang3/sql/batch.sql
        engineType: emr_serverless_spark
        engineQueue: default
        position:
          x: "100"
          y: "50"
      - name: inc_counter
        type: set_variable
        variableType: PIPELINE_INNER
        variableName: loop_count
        value:
          calculateValue:
            left: "{{variables.loop_count}}"
            op: PLUS
            right: "1"
        dependsOn:
          activities:
            - name: do_work
        position:
          x: "300"
          y: "50"

场景二:If/Else 条件标志

variables:
  - name: data_ready
    type: String
    defaultValue: "false"

activities:
  - name: check_data
    type: notebook
    # ... Notebook 中根据检查结果调用 API 设置变量
    position:
      x: "200"
      y: "100"

  - name: mark_ready
    type: set_variable
    variableType: PIPELINE_INNER
    variableName: data_ready
    value:
      rawValue: "true"
    dependsOn:
      activities:
        - check_data
    position:
      x: "400"
      y: "100"

  - name: branch
    type: if_condition
    condition:
      left: "{{variables.data_ready}}"
      op: EQUAL_TO
      right: "true"
    dependsOn:
      activities:
        - mark_ready
    position:
      x: "600"
      y: "100"

场景三:字符串拼接

- name: build_path
  type: set_variable
  variableType: PIPELINE_INNER
  variableName: output_path
  value:
    calculateValue:
      left: "/data/output/"
      op: CONCAT
      right: "{{pipeline.parameters.biz_date}}"
  position:
    x: "200"
    y: "100"
# 结果:output_path = "/data/output/2026-06-01"

使用建议

建议

说明

预先定义变量

PIPELINE_INNER 引用的变量必须在 Pipeline 的 variables 中预先定义。

注意执行顺序

Set Variable 必须在引用该变量的 Activity 之前执行(通过 dependsOn 保证)。

循环中更新条件

在 Do While 循环体中务必通过 Set Variable 更新条件变量。

返回值命名清晰

PIPELINE_OUTPUT 的返回值名称应语义明确,便于父 Pipeline 引用。

避免过度使用

简单的参数传递优先使用 parameterValues,仅在需要动态修改时使用 Set Variable。

最近更新时间:2026.06.12 11:44:17
这个页面对您有帮助吗?
有用
有用
无用
无用