Databricks ジョブで条件付きでタスクを実行する
既定では、ジョブ タスクは、その依存関係が実行され、すべてが成功したときに実行されますが、特定の条件が満たされた場合にのみ実行するように Databricks ジョブのタスクを構成することもできます。 Databricks ジョブでは、タスクを条件付きで実行するための次のメソッドがサポートされています。
[ 依存関係の場合は実行 ] を指定して、タスクの依存関係の実行ステータスに基づいてタスクを実行できます。 たとえば、
Run if
を使用して、依存関係の一部またはすべてに障害が発生した場合でもタスクを実行し、ジョブを障害から回復して実行を続行できます。If/else 条件タスクは、Boolean式の結果に基づいてジョブ DAG の一部を実行するために使用されます。
If/else condition
タスクを使用すると、ジョブに分岐ロジックを追加できます。たとえば、アップストリーム インジェスト タスクが新しいデータを追加する場合にのみ、変換タスクを実行します。 それ以外の場合は、データ処理タスクを実行します。
タスクのRun if
条件を追加するの
Run if
条件は、1 つ以上の依存関係を持つタスクを編集するときに構成できます。タスクに条件を追加するには、タスク設定の [ 依存関係の場合は実行 ] ドロップダウン メニューから条件を選択します。 Run if
条件は、すべてのタスクの依存関係が完了した後に評価されます。また、1 つ以上の依存関係を持つ新しいタスクを追加するときに、 Run if
条件を追加することもできます。
Run if
条件オプション
次の Run if
条件をタスクに追加できます。
すべて成功: すべての依存関係が実行され、成功しました。 これは、タスクを実行するための既定の条件です。 条件が満たされていない場合、タスクは
Upstream failed
としてマークされます。少なくとも 1 つの依存関係が成功しました。 条件が満たされていない場合、タスクは
Upstream failed
としてマークされます。失敗なし: どの依存関係も失敗せず、少なくとも 1 つの依存関係が実行されました。 条件が満たされていない場合、タスクは
Upstream failed
としてマークされます。すべて完了: タスクは、依存する実行のステータスに関係なく、すべての依存関係が実行された後に実行されます。 この条件により、依存するタスクの結果に依存せずに実行されるタスクを定義できます。
少なくとも 1 つの依存関係が失敗しました: 少なくとも 1 つの依存関係が失敗しました。 条件が満たされていない場合、タスクは
Excluded
としてマークされます。すべて失敗: すべての依存関係が失敗しました。 条件が満たされていない場合、タスクは
Excluded
としてマークされます。
注
障害を処理するように構成されたタスクは、
Run if
条件が満たされていない場合にExcluded
としてマークされます。除外されたタスクはスキップされ、成功として扱われます。すべてのタスクの依存関係が除外されると、
Run if
条件に関係なく、タスクも除外されます。タスク実行を取り消すと、取り消しはダウンストリーム タスクに伝達され、失敗を処理する
Run if
条件を持つタスクが実行されます (たとえば、タスク実行が取り消されたときにクリーンアップ タスクの実行を確認するため)。
Databricks ジョブはジョブの実行状態をどのように判断しますか?
Databricks ジョブは、ジョブの リーフ タスクの結果に基づいて、ジョブの実行が成功したかどうかを判断します。 リーフ タスクは、ダウンストリームの依存関係がないタスクです。 ジョブ実行は、次の 3 つの結果のいずれかになります。
成功: すべてのタスクが成功しました。
失敗して成功: 一部のタスクは失敗しましたが、すべてのリーフ タスクは成功しました。
失敗: 1 つ以上のリーフ タスクが失敗しました。
If/else condition
タスクを使用してジョブに分岐ロジックを追加する
If/else condition
タスクを使用して、 Boolean 式に基づいてジョブ DAG の一部を実行します。 この式は、 Boolean 演算子とオペランドのペアで構成され、オペランドは 、ジョブおよびタスク・パラメーター変数 を使用してジョブまたはタスクの状態を参照したり、 タスク値を使用したりできます。
注
数値と非数値は、 Boolean 演算子によって異なる方法で処理されます。
==
演算子と!=
演算子は、オペランドの文字列比較を実行します。たとえば、12.0 == 12
は false と評価されます。>
、>=
、および<=
演算子は、オペランドの数値比較を実行します。たとえば、12.0 >= 12
は true と評価され、10.0 >= 12
は false と評価されます。数値、文字列、および Boolean 値のみ、オペランドで タスク値 を参照する場合に使用できます。 その他の型では、条件式が失敗します。 数値以外の値型は文字列にシリアル化され、
If/else condition
式では文字列として扱われます。 たとえば、タスク値が Boolean 値に設定されている場合、"true"
または"false"
にシリアル化されます。
If/else condition
タスクは、ジョブを作成するとき、または既存のジョブのタスクを編集するときに追加できます。If/else condition
タスクを構成するには:
[タイプ] ドロップダウン メニューで、[
If/else condition
を選択します。最初の [条件 ] テキスト ボックスに、評価するオペランドを入力します。 オペランドは、ジョブまたはタスクのパラメーター変数、またはタスク値を参照できます。
ドロップダウンメニューから Boolean 演算子を選択します。
2 番目の [条件 ] テキスト ボックスに、条件を評価するための値を入力します。
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 でジョブ実行の詳細を表示すると、式の結果と式の評価の詳細を表示できます。