web-dev-qa-db-ja.com

DAG全体の気流のdepends_on_past

タスクに適用するだけでなく、DagRun全体にdepends_on_pastを使用する方法がありますか?

私は毎日のDAGを行っており、金曜日のDagRunは4番目のタスクでエラーが発生しましたが、土曜日と日曜日のDagRunは引き続きスケジュールどおりに実行されました。 depends_on_past = Trueを使用すると、同じ4番目のタスクでDagRunが一時停止しますが、最初の3つのタスクは引き続き実行されます。

DagRun DBテーブルには、金曜日のDagRunのstateを含むfailed列があることがわかります。私が欲しいのは、前のDagRunが失敗した場合に開始せず、以前に失敗したタスクを見つけるまで開始および実行しないようにDagRunを構成する方法です。

これが可能かどうか誰かが知っていますか?

9
chop4433

最初のタスクで、depends_on_past=Trueおよびwait_for_downstream=True、最後の実行が成功した場合にのみ、組み合わせにより現在のdag-runが実行されます。

最初のタスクを現在のdag-runに設定すると、前のタスク(depends_on_past)とすべてのタスク(wait_for_downstream)が成功するまで待機するため

9
WeiChing Lin

可能な解決策の1つは、xcomを使用することです。

  1. 2つのPythonOperators start_taskおよびend_taskをDAGに追加します。
  2. 他のすべてのタスクをstart_taskに依存させる
  3. end_taskを他のすべてのタスクに依存させる(set_upstream)。
  4. end_taskは常に変数last_success = context['execution_date']をxcom(xcom_Push)にプッシュします。 (PythonOperatorsではprovide_context = Trueが必要です)。
  5. また、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

3
Joe Samanek