エアフロー-将来のすべての実行日を取得する方法

Aug 22 2020

エアフロージョブのスケジュールに取り組んでいます。ただし、正しいジョブをスケジュールしたかどうかを確認するには、将来いつ実行されるかを確認する必要があります。

Airflowには、次の実行を提供する次のコマンドがあります。ただし、一部のユースケースではそれだけでは不十分です。たとえば、隔週の金曜日にジョブの実行をスケジュールしました。どうすれば確認できますか。

airflow next_execution <dag_id>

方法はありますか、このダグが実行される将来のすべての日付を取得できます。または少なくともカップル?

回答

1 MiguelTrejo Aug 22 2020 at 00:25

例として、Airflowはフッククロニターの下で使用します。croniterのドキュメントの例に従うと、これは次のように機能します(たとえば、dagは毎週金曜日の午後12時に実行され、基準日は8月20日の昨日であると考えてください)。

from croniter import croniter 
from datetime import datetime

# Specify current date
base = datetime(2020, 8, 20, 0, 0)

# Set croniter
iter = croniter('0 12 * * 5', base)  

# Get next execution 
iter.get_next(datetime)
>>>
datetime.datetime(2020, 8, 21, 12, 0)

ここbaseで、dagの最新の実行日として指定できます(dag.latest_execution_date)。そして、n回呼び出すことで、次の実行を取得できますiter.get_next(datetime)

1 joebeeson Aug 22 2020 at 02:48

一方で、ほとんどのプロセスの使用croniter、インストールへのアクセス権を持っている場合、それは既存のインタフェースを経由して、「ソース」から情報を取得するために常に最善です。

from airflow import models
from datetime import datetime, timedelta


dag_bag = models.DagBag()

dag_id = "dag_name"
dag = dag_bag.get_dag(dag_id)

now = datetime.now()
until = now + timedelta(days=21)

runs = dag.get_run_dates(start_date=now, end_date=until)
print(runs)