本文介绍 If/Else 类型的 Activity 配置,用于在 Pipeline 中实现条件分支逻辑。
If/Else Activity(YAML 类型标识为 if_condition)根据条件判断结果执行不同的下游分支。条件为 true 时走 true 分支,条件为 false 时走 false 分支。
适用场景:
activities: - name: check_data_ready type: if_condition condition: left: "{{variables.data_count}}" op: GREATER_THAN right: "0" position: x: "200" y: "100" # true 分支:数据存在,执行处理 - name: process_data type: sql source: WORKSPACE path: /Workspace/Users/zhang3/sql/process.sql engineType: emr_serverless_spark engineQueue: default dependsOn: activities: - name: check_data_ready outcome: true position: x: "400" y: "50" # false 分支:数据为空,发送告警 - name: send_empty_alert type: notebook source: WORKSPACE path: /Workspace/Users/zhang3/notebooks/alert.notebook generalComputingResourceGroupName: default_py_group dependsOn: activities: - name: check_data_ready outcome: false position: x: "400" y: "200"
字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| String | 是 | 固定为 |
| Object | 是 | 条件表达式 |
| String | 是 | 左值(支持参数/变量引用) |
| Enum | 是 | 比较运算符 |
| String | 是 | 右值(支持参数/变量引用) |
op 值 | 含义 | 示例 |
|---|---|---|
| 等于 |
|
| 不等于 |
|
| 大于 |
|
| 大于等于 |
|
| 小于 |
|
| 小于等于 |
|
注意
比较时两侧值均为字符串类型。如果值可解析为数字,则按数字比较;否则按字符串字典序比较。
下游 Activity 通过 dependsOn.activities[].outcome 字段指定所属分支:
outcome 值 | 含义 |
|---|---|
| 条件成立时执行。 |
| 条件不成立时执行。 |
不指定 | 无论条件结果如何,上游执行完成后均执行。 |
# true 分支 dependsOn: activities: - name: check_data_ready outcome: true # false 分支 dependsOn: activities: - name: check_data_ready outcome: false # 无条件(两个分支都完成后执行) dependsOn: activities: - name: check_data_ready
当 If/Else 条件判断完成后,未被选中分支上的 Activity 状态标记为 SKIPPED(跳过),不会实际执行。
If/Else 支持嵌套使用,实现多级条件判断:
activities: - name: check_region type: if_condition condition: left: "{{pipeline.parameters.region}}" op: EQUAL_TO right: "cn" - name: check_cn_level type: if_condition condition: left: "{{variables.data_level}}" op: EQUAL_TO right: "vip" dependsOn: activities: - name: check_region outcome: true - name: process_cn_vip type: sql # ... dependsOn: activities: - name: check_cn_level outcome: true - name: process_cn_normal type: sql # ... dependsOn: activities: - name: check_cn_level outcome: false - name: process_overseas type: sql # ... dependsOn: activities: - name: check_region outcome: false
建议 | 说明 |
|---|---|
条件值来自变量 | 使用 |
避免深层嵌套 | 超过 3 层嵌套会降低可读性,考虑拆分为多个 Pipeline。 |
两分支都配置 | 建议 true 和 false 分支都有对应处理(至少做日志记录),避免静默跳过。 |
注意类型比较 | 左右值均为字符串,数值比较时确保值可正确解析为数字。 |