在 Azure Databricks 作業中有條件地執行工作
根據預設,作業工作會在其相依性執行且全部成功時執行,但您也可以在 Azure Databricks 作業中設定工作,只在符合特定條件時才執行。 Azure Databricks 作業支援下列方法來有條件地執行工作:
- 您可以根據工作相依性的執行狀態,指定 [執行] 是否 要執行工作的相依性。 例如,即使部分或所有相依性失敗,您仍可使用
Run if
來執行工作,讓您的作業能夠從失敗中復原並繼續執行。 - If/else 條件 工作是用來根據布林運算式的結果來執行作業 DAG 的一部分。 工作
If/else condition
可讓您將分支邏輯新增至作業。 例如,只有在上游擷取工作新增資料時,才執行轉換工作。 否則,請執行資料處理工作。
Run if
新增工作的條件
您可以在 Run if
編輯具有一或多個相依性的工作 時 設定條件。 若要將條件新增至工作,請從 工作組態中的 [執行相依性 ] 下拉式功能表中選取條件。 完成所有工作相依性之後,就會 Run if
評估條件。 當您新增具有一或多個相依性的新工作時,您也可以新增 Run if
條件。
Run if
條件選項
您可以將下列 Run if
條件新增至工作:
- 全部成功 :所有相依性都已執行並成功。 這是執行工作的預設條件。 工作會標示為
Upstream failed
條件未滿足。 - 至少有一個成功 :至少有一個相依性成功。 工作會標示為
Upstream failed
條件未滿足。 - 無失敗 :沒有相依性失敗,且至少執行一個相依性。 工作會標示為
Upstream failed
條件未滿足。 - 全部完成 :不論相依執行的狀態為何,工作都會在其所有相依性執行之後執行。 此條件可讓您定義執行的工作,而不需要視其相依工作的結果而定。
- 至少一個失敗 :至少一個相依性失敗。 工作會標示為
Excluded
條件未滿足。 - 全部失敗 :所有相依性都失敗。 工作會標示為
Excluded
條件未滿足。
注意
- 設定為處理失敗的工作會標示為
Excluded
未滿足其Run if
條件。 已排除的工作會略過,並視為成功。 - 如果排除所有工作相依性,工作也會排除,不論其
Run if
條件為何。 - 如果您取消工作執行,取消會透過下游工作傳播,以及處理
Run if
失敗條件的工作會執行,例如,確認取消工作執行時會執行清除工作。
Azure Databricks 作業如何判斷作業執行狀態?
Azure Databricks 作業會根據作業分 葉工作 的結果,判斷作業執行是否成功。 分葉工作是沒有下游相依性的工作。 作業執行可以有三個結果之一:
- 成功:所有工作都成功。
- 失敗成功:某些工作失敗,但所有分葉工作都成功。
- 失敗:一或多個分葉工作失敗。
使用 If/else condition
工作將分支邏輯新增至作業
使用工作 If/else condition
,根據布林運算式執行作業 DAG 的一部分。 運算式包含布林運算子和一組運算元,其中運算元可以使用作業和工作參數變數 或使用 工作值 來參考作業或工作狀態 。
注意
- 數值和非數值會根據布林運算子以不同的方式處理:
==
和!=
運算子會執行其運算元的字串比較。 例如,12.0 == 12
評估為 false。>
、>=
和<=
運算子會執行其運算元的數值比較。 例如,12.0 >= 12
評估為 true,並10.0 >= 12
評估為 false。- 在參考 運算元中的工作值時,只允許數值、字串和布林值 。 任何其他類型都會導致條件運算式失敗。 非數數值型別會序列化為字串,並視為運算式中的
If/else condition
字串。 例如,如果工作值設定為布林值,則會序列化為"true"
或"false"
。
您可以在建立作業或 編輯 現有作業 中的工作時 新增 If/else condition
工作。 若要設定工作 If/else condition
:
- 在 [ 類型 ] 下拉功能表中,選取
If/else condition
。 - 在第一個 [條件] 文本框中,輸入要評估的操作數。 操作數可以參考作業或工作參數變數或工作值。
- 從下拉功能表中選取布爾運算元。
- 在第二個 [條件] 文本框中,輸入評估條件的值。
若要設定工作 If/else condition
上的相依性:
- 在 DAG 檢視中選取工作
If/else condition
,然後按兩下 [ + 新增工作]。 - 輸入工作的詳細數據之後,按兩下 [相依] ,然後選取
<task-name> (true)
其中<task-name>
是工作的名稱If/else condition
。 - 針對評估為
false
的條件重複 。
例如,假設您有名為 process_records
的工作,其會維護在名為 bad_records
的值中無效的記錄計數,而且您想要根據是否找到無效的記錄進行分支處理。 若要將此邏輯新增至工作流程,您可以使用類似 的{{tasks.process_records.values.bad_records}} > 0
表達式來建立工作If/else condition
。 然後,您可以根據條件的結果新增相依工作。
執行包含工作 If/else condition
的工作完成之後,您可以在UI中檢視作業執行詳細數據時,檢視 表達式評估的結果和表示式評估的詳細 數據。