Azure Databricks Lakeflow 作业中已禁用的任务在运行时会被跳过,而不会从该作业中移除。 禁用的任务保留其配置和运行历史记录,以便以后无需重新生成任务即可重新启用它们。 本页介绍作业运行时被禁用任务的行为方式,包括它们对下游任务的影响、修复过程以及部分运行的影响。
下游任务行为
当一个作业运行时,Lakeflow作业会根据每个下游任务的运行条件评估其上游任务,以决定是否运行、跳过或禁用该任务。 已禁用的任务以 Disabled 终止代码完成。
如果由于一个或多个父任务被禁用而无法满足下游任务的“运行条件”,那么 Lakeflow Jobs 也会将该次运行中的下游任务标记为禁用。 禁用的下游任务在定向无环图(DAG)视图的右上角显示一个关闭的大型圆形图标,因此可以在启动运行之前看到影响。
下表汇总了当上游任务被禁用时每个 运行条件 的下游行为。 有关 运行如果 选项的完整列表,请参阅 配置任务依赖项。
| 运行 if 条件 | 禁用父任务时的下游任务行为 | Example |
|---|---|---|
| 全部成功 (默认值) | 下游任务不运行。 被禁用的父任务不满足 succeeded 要求。 |
A (disabled) → B: B 不运行。 |
| 至少有一个成功 | 如果至少有一个其他父任务成功,那么下游任务将运行。 如果所有其他父任务都失败或已禁用,则下游任务不会运行。 |
A (disabled) 和 C (succeeded) → B: B 运行。 |
| 无失败 | 只要至少有一个父任务成功完成,下游任务就会运行。 如果禁用了所有父任务,则下游任务不会运行。 |
A (disabled) 和 C (skipped) → B:由于没有父任务失败,B 就运行了。 |
| 全部完成 | 下游任务正常运行。 禁用的父任务被视为已完成。 |
A (disabled) → B: B 运行。 |
| 至少一个失败 | 如果至少有一个其他父任务失败,则下游任务将运行。 禁用的父任务不会被视为失败。 如果没有其他父任务失败,则下游任务不会运行。 |
A (disabled) 和 C (failed) → B: B 运行。 |
| 全部失败 | 下游任务不运行。 禁用的父任务不会被视为失败。 |
A (disabled) → B: B 不运行。 |
Note
只有显式禁用的任务在作业定义中含有 disabled: true。 Lakeflow 作业在运行创建时确定下游禁用状态,并不会将其保留在作业设置中。
禁用任务
若要使用 UI 禁用或重新启用任务,请参阅 “禁用任务”。
若要通过 API 或捆绑包禁用任务,请执行以下操作:
使用 disabled: true、Azure Databricks CLI、Azure Databricks SDK 或 声明性自动化捆绑包在作业设置中设置任务:
{
"tasks": [
{
"task_key": "load_raw_data",
"disabled": true,
"notebook_task": {
"notebook_path": "/Shared/etl/load_raw_data"
}
}
]
}
响应jobs/getjobs/list仅针对显式禁用的任务返回disabled: true。 在运行期间动态禁用的任务不会反映在存储的作业设置中。
修复和部分运行中的禁用任务
禁用任务在修复运行和部分运行中的表现不同于典型的计划运行:
-
维修: Lakeflow 作业使用每个任务的运行状态来确定要修复的内容,而不是任务的禁用状态。 若要强制禁用的任务作为修复的一部分运行,请在
rerun_tasks中包含它。 请参阅重新运行失败的和跳过的任务。 - 部分运行: 在开始部分运行时,默认情况下不会选择禁用的任务,但你可以选择它们以运行一次,而无需在作业设置中重新启用它们。 Lakeflow 作业仅运行您选择的任务,并且在部分运行期间不会应用“运行条件”传播。
局限性
禁用的任务具有以下限制:
- 如果禁用提供其条件值的上游任务,则
If/else condition任务将失败。 - 如果禁用提供其输入值的上游任务,则
For each任务将失败。 - 只有用户禁用的任务显示在
disabled: true作业定义中。 若要查看在运行作业之前受影响的下游任务,请使用作业 UI 中的 DAG 视图。