8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Airflowで月末に実行するスケジュールを設定する

Last updated at Posted at 2021-03-09

cronと月末

AirflowのDAGスケジュールにおいて、

  • 1/31 0:00
  • 2/28 0:00
  • 3/31 0:00
  • 4/30 0:00
  • ...
  • 12/31 0:00

のように毎月の月末に実行したい場合、標準のcron式だと設定がちょっと厄介です。
30日の月もあれば31日の月もありますし、2月にいたってはうるう年のことも考えなければなりません。

Airflowではcron式の日フィールドに L が使える

幸いなことに、Airflowが使っているcronモジュール croniter はいくつかの非標準のcron式もサポートしています。

その中には L があります。
Airflow(croniter)において L は日フィールドにのみ使える特殊な文字で、指定すると その月の最後の日 を意味することになります。

したがって、

dag = DAG(
    ...
    schedule_interval="0 0 L * *"
    ...
)

のように書けば毎月の月末に実行することができます。

おまけ: Airflowではcron式の曜日フィールドには # が使える

完全なる余談ですが、他にサポートしている文字として、 # があります。

Airflow(croniter)において # は曜日フィールドにのみ使える特殊な文字です。
L と違い # 単体ではなく曜日指定との組み合わせで使います。 曜日#n のように指定すると その月の第n曜日 を意味することになります。

たとえば、毎月第4火曜日 0:00に実行するDAGの場合、

dag = DAG(
    ...
    schedule_interval="0 0 * * 2#4"
    ...
)

のように書くことができます。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?