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