在 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

  1. 在 [ 類型 ] 下拉功能表中,選取 If/else condition
  2. 在第一個 [條件] 文本框中,輸入要評估的操作數。 操作數可以參考作業或工作參數變數或工作值。
  3. 從下拉功能表中選取布爾運算元。
  4. 在第二個 [條件] 文本框中,輸入評估條件的值。

若要設定工作 If/else condition 上的相依性:

  1. 在 DAG 檢視中選取工作 If/else condition ,然後按兩下 [ + 新增工作]。
  2. 輸入工作的詳細數據之後,按兩下 [相依] ,然後選取 <task-name> (true) 其中 <task-name> 是工作的名稱 If/else condition
  3. 針對評估為 false的條件重複 。

例如,假設您有名為 process_records 的工作,其會維護在名為 bad_records的值中無效的記錄計數,而且您想要根據是否找到無效的記錄進行分支處理。 若要將此邏輯新增至工作流程,您可以使用類似 的{{tasks.process_records.values.bad_records}} > 0表達式來建立工作If/else condition。 然後,您可以根據條件的結果新增相依工作。

執行包含工作 If/else condition 的工作完成之後,您可以在UI中檢視作業執行詳細數據時,檢視 表達式評估的結果和表示式評估的詳細 數據。