web-dev-qa-db-ja.com

Airflow:オペレーターにstart_dateがあるのはなぜですか?

演算子(タスクインスタンス)に「開始日」が必要な理由がわかりません。 DAGに渡すもので十分ではありませんか?

また、現在の時刻が2018年2月7日午前8時30分(UTC)であり、dagのstart_dateを2018年2月7日0.00 amに設定した場合、スケジュール間隔のcron式は30 9 * * *(毎日午前9時30分、つまり次の1時間で実行されます)。 DAGは今日の午前9時30分または明日(2月8日の午前9時30分)に実行されますか?

8
soupybionics

タスクインスタンスのstart_dateについては、これを使用したことがないので、DAGのstart_dateは常に1つだけです。

ただし、これを見ると、メインDAGとは異なる時間に開始する特定のタスクを指定できることがわかります。これはレガシー機能であり、FAQを読むことから、代わりにそのタイプの時間センサーを使用し、DAGを介して渡されるすべてのタスクに対して1つのstart_dateを使用することをお勧めします。

2番目の質問:

実行の実行日は常に、スケジュールに基づく前の期間です。

ドキュメントから (Airflow Docs)

1日のschedule_intervalでDAGを実行すると、2016-01-01T23:59の直後にスタンプが押された2016-01-01の実行がトリガーされます。つまり、対象となる期間が終了すると、ジョブインスタンスが開始されます。

明確にするために:

  • 毎日のスケジュールで設定した場合、8日に7が実行されます。
  • 日曜日に実行するように毎週のスケジュールに設定した場合、この日曜日の実行日は最後の日曜日になります。
12
Blakey

一部の複雑な要件では、タスクレベルで特定のタイミングが必要になる場合があります。たとえば、DAGを1週間毎日実行してから、一部の集計ログタスクが実行を開始するようにしたい場合、タスクレベルで異なる開始日を設定できます。

もう少し役立つ情報... airflow DAGクラスソースを見ると、DAGレベルでstart_dateを設定すると、タスクstart_dateのデフォルト値がない場合にタスクに渡されるだけのように見えますdefault_args辞書を介して、または特定のstart_dateがタスクごとのレベルで定義されていない場合に、DAGに渡されました。したがって、DAG内のすべてのタスクを同時に開始する必要がある場合(依存関係は別にして)、DAGレベルでstart_dateを設定するだけで十分です。

1
Jinglesting

すでにここにあるものに追加するだけです。別のタスクに依存するタスクには、その依存関係の開始日以上の開始日が必要です。

例えば:

  • task_aが依存する場合task_b
  • 持てない
    • task_a開始日= 2019年1月1日
    • task_b start_date = 1/2/2019
    • それ以外の場合、task_bはその日付で実行されず、完了としてマークすることもできないため、2019年1月1日はtask_aを実行できません。

なぜこれが欲しいのですか?

  • 私は別のDAGの完了を待機する外部タスクセンサーであるタスクのこのロジックを望んでいました。しかし、もう1つのDAGは、現在のDAGより後に開始日がありました。したがって、他のDAGが存在しない日の間、依存関係を設定したくありませんでした。
0
Arran Duff