タスクに適用するだけでなく、DagRun全体にdepends_on_past
を使用する方法がありますか?
私は毎日のDAGを行っており、金曜日のDagRunは4番目のタスクでエラーが発生しましたが、土曜日と日曜日のDagRunは引き続きスケジュールどおりに実行されました。 depends_on_past = True
を使用すると、同じ4番目のタスクでDagRunが一時停止しますが、最初の3つのタスクは引き続き実行されます。
DagRun DBテーブルには、金曜日のDagRunのstate
を含むfailed
列があることがわかります。私が欲しいのは、前のDagRunが失敗した場合に開始せず、以前に失敗したタスクを見つけるまで開始および実行しないようにDagRunを構成する方法です。
これが可能かどうか誰かが知っていますか?
最初のタスクで、depends_on_past=True
およびwait_for_downstream=True
、最後の実行が成功した場合にのみ、組み合わせにより現在のdag-runが実行されます。
最初のタスクを現在のdag-runに設定すると、前のタスク(depends_on_past)とすべてのタスク(wait_for_downstream)が成功するまで待機するため
可能な解決策の1つは、xcom
を使用することです。
start_task
およびend_task
をDAGに追加します。start_task
に依存させるend_task
を他のすべてのタスクに依存させる(set_upstream
)。end_task
は常に変数last_success = context['execution_date']
をxcom(xcom_Push
)にプッシュします。 (PythonOperatorsではprovide_context = True
が必要です)。start_task
は常にxcom(xcom_pull
)をチェックして、前のDagRunのexecution_dateまたはDAGのstart_date(プロセスを開始させるため)に等しい値を持つlast_success
変数が存在するかどうかを確認します。Xcomの使用例:
https://github.com/Apache/incubator-airflow/blob/master/airflow/example_dags/example_xcom.py