エアフロー-将来のすべての実行日を取得する方法
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)