恥ずかしながら最近になって知ったワークフローエンジン Apache Airflow。日本語の紹介記事もちらほら出てきていますが、公式ドキュメントをちょっとずつ抄訳しながら読んでいこうと思います。
7回目の今回はDAGを実行する(Running DAGs)。
バージョン2.3.3時点のものです。
DAGの起動
DAGは次の2つのうちいずれかの方法で起動されます:
- 人手もしくはWebAPI経由の操作に基づく起動
- DAGの一部として定義されたスケジュールに基づく起動
DAG宣言にスケジュールは必須ではありません。しかしスケジュールがあるのがふつうです。スケジュールはschedule_interval
引数を使って次のようにして指定します:
with DAG("my_daily_dag", schedule_interval="@daily"):
…
schedule_interval
引数は妥当な Crontab スケジュール値であれば何でも指定できます:
with DAG("my_daily_dag", schedule_interval="0 * * * *"):
…
Tip
schedule_interval
の値についてより詳しくはDAG Runを御覧ください。
DAGのスケジュール指定にschedule_interval
では役不足のときは、Timetables をご覧ください。logical date
についてより詳しくはデータ区間 や execution_dateが意味するものをご覧ください。
DAGを起動とはすなわちDAGの新しいインスタンスの生成です。このインスタンスのことをAirflowではDAG Runと呼びます。DAG Runは同じDAGについて多重(並列)で起動することができます。それぞれのDAG Runはデータ区間を持ちます。これは当該DAGのタスクが処理するデータの期間を指し示すものです。
なぜこれが便利なのでしょうか? 例えば今あなたは日次の実験データの集まりを処理するDAGを作成しているとしましょう。それらのデータが書き換えられて、過去3ヶ月分のデータを処理し直さないとならなくなったとします。問題ありません。AirflowならDAG Runのコピーを過去3ヶ月の各日分をまとめて作成しデータを埋め戻す(backfill)ことができます。
これらのDAG Runはすべて同一の日時に起動しますが、それぞれのDAG Runは過去3ヶ月間の各日を範囲とするデータ区間(data interval)を持ち、そのデータ区間は当該DAGに含まれるすべてのタスク、オペレーター、そしてセンサーから参照されます。
DAGの起動の都度DAG Runが生成されるのとほとんど同じ方法で、DAG内の個々のタスクについてもタスク・インスタンスが生成されます。
DAG Runは開始日と終了日を持ちます。これはDAGが実際に実行された期間を示します。この日付情報とは別に、論理日付(logical date)という別の日付情報もあります。これはスケジュールもしくは人手/WebAPI経由で要求されたDAGの起動時刻を示すものです。「論理~」という呼び名は、DAG Run自体のコンテキストに応じて、複数の意味を持ちうるというこの日付の性質に由来します。
例えば、あるDAG Runが人手で起動されたとき、論理日付はそのDAG Runが起動された日時となります。そしてこの値はDAGの開始日と一致します。一方、DAGが所定のschedule_interval
に基づき、スケジュール起動したとき、論理日付はデータ区間の開始日を指します。つまりDAG Runの開始日は論理日付+schedule_interval
となります。
タイトルとは裏腹に、このセクションで一番注目すべきなのは各種の日付の概念だと思います。
logical date
は以前はexecution_date
と呼ばれていたそうで、Airflowについて学ぶときにはこの読み替えも知っておく必要があるでしょう。
このへんについてとくにデータ区間(data interval)を軸にまとめてくださっているこちらの記事がとても参考になります。