タスクの依存関係を構成する
[依存関係の場合に実行 ] フィールドを使用すると、他のタスクの成功、失敗、または完了に基づいて、タスクに制御フロー ロジックを追加できます。
依存関係は、ジョブ DAG でタスク間の線として視覚的に表されます。
Databricks は、ダウンストリーム タスクを実行する前にアップストリーム タスクを実行し、できるだけ多くのタスクを並列で実行します。
注記
「依存先 」は、ジョブが複数のタスクで構成されている場合にのみ表示されます。
Databricks には、制御フローと条件付けのための次の機能もあります。
- If/else 条件 タスクは、ブール式の結果に基づいてジョブ DAG の一部を実行するために使用されます。
If/else condition
タスクを使用すると、ジョブに分岐ロジックを追加できます。たとえば、アップストリームの取り込みタスクが新しいデータを追加する場合にのみ、変換タスクを実行します。 「 If/else タスクを使用してジョブに分岐ロジックを追加する」を参照してください。 - For each 条件タスクは、入力配列に基づいて別のタスクにループ ロジックを追加します。入力配列は、手動で指定することも、動的に生成することもできます。
For each
タスクを使用してループ内の別のタスクを実行するを参照してください。 - 実行 ジョブ タスクを使用すると、ワークスペース内の別のジョブをトリガーできます。ジョブについては、 実行 ジョブ タスクを参照してください。
タスクに実行条件を追加する
新しいタスクを作成するときに DAG でタスクが選択されている場合、新しいタスクにはデフォルトでこのタスクに対する依存関係が構成されています。
条件を編集または追加するには、次の操作を行います。
- タスクを選択します。
- [依存先 ] フィールドで、[ X ] をクリックしてタスクを削除するか、ドロップダウン メニューから追加するタスクを選択します。
- 「依存関係の場合に実行 」フィールドで条件付きオプションのいずれかを選択します。
- [タスクの保存 ] をクリックします。
Run if
条件オプション
タスクには、次の Run if
条件を追加できます。
- すべて成功しました : すべての依存関係が実行され、成功しました。 これがデフォルト設定です。 条件が満たされない場合、タスクは
Upstream failed
としてマークされます。 - 少なくとも 1 つが成功しました : 少なくとも 1 つの依存関係が成功しました。 条件が満たされない場合、タスクは
Upstream failed
としてマークされます。 - 失敗なし : どの依存関係も失敗せず、少なくとも 1 つの依存関係が実行されました。 条件が満たされない場合、タスクは
Upstream failed
としてマークされます。 - すべて完了 : タスクは、依存する実行のステータスに関係なく、すべての依存関係が実行された後に実行されます。 この条件により、依存するタスクの結果に依存せずに実行されるタスクを定義できます。
- 少なくとも 1 つが失敗しました : 少なくとも 1 つの依存関係が失敗しました。 条件が満たされない場合、タスクは
Excluded
としてマークされます。 - すべて失敗しました : すべての依存関係が失敗しました。 条件が満たされない場合、タスクは
Excluded
としてマークされます。
注記
- 障害を処理するように構成されたタスクは、
Run if
条件が満たされていない場合、Excluded
としてマークされます。除外されたタスクはスキップされ、成功したタスクとして扱われます。 - すべてのタスク依存関係が除外されている場合、タスクは
Run if
条件に関係なく除外されます。 - タスク実行をキャンセルすると、キャンセルはダウンストリーム タスクを通じて伝達され、失敗を処理する
Run if
条件を持つタスクが実行されます (たとえば、タスクの実行が取り消されたときにクリーンアップ タスクの実行を確認します)。
タスク依存関係を持つジョブの例
タスクの依存関係を構成すると、タスク実行の有向非巡回グラフ (DAG) が作成され、これはジョブ スケジューラで実行順序を表す一般的な方法です。 たとえば、次の 4 つのタスクで構成されるジョブについて考えてみます。
- タスク 1 はルート タスクであり、他のタスクに依存しません。
- タスク 2 とタスク 3 は、タスク 1 が最初に完了することに依存します。
- 最後に、タスク 4 は、タスク 2 とタスク 3 が正常に完了することに依存します。
次の図は、これらのタスクの処理順序を示しています。