0
1

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.

schedule_interval=Noneの場合はnext_execution_time=prev_execution_time=execution_time

Posted at

schedule_interval=Noneの場合、next_execution_timeはどうなる?

Airflowのデフォルト変数には next_execution_time という、次の実行時の execution_time が格納される変数があります。
これはDAGがスケジュール設定されている(schedule_intervalがNoneではない)ときに意味のある値なのですが、スケジュール設定されていない(schedule_intervalがNoneである)ときにどうなるか調べました。

確認したバージョン

  • Airflow 1.10.9

確認手順

schedule_interval=NoneのDAGを作り、Airflowコンソール上から手動実行する。

結果1: schedule_interval=Noneの場合、next_execution_timeはexecution_timeと同じ値になる

スケジュール設定がない以上次の実行も何もないのでNoneが入るのかなと思いましたが、意外にも execution_time と同じ値が入っていました。

結果2: schedule_interval=Noneの場合、prev_execution_timeはexecution_timeと同じ値になる

next_execution_time の対になる prev_execution_time (前回実行時の execution_time が格納される変数)も気になって調べてみました。
その結果、こちらも execution_time と同じ値が入っていました。

「2回目を実行したら1回目の execution_time が入るかな?」と思い何度か繰り返しましたが、そんなことはなく結果は常に execution_time と同じ値でした。

結論:schedule_interval=Noneの場合はnext_execution_time=prev_execution_time=execution_time

以上より、schedule_interval=Noneの場合は常にnext_execution_time=prev_execution_time=execution_timeになることがわかりました。

Noneではないのでis not Noneを期待したユーザーコードでエラーが出ることはありませんが、ちょっと気持ち悪さもありますね。

付録

確認コード

execution_time_test.py
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import timedelta

default_args = {
    "owner": "airflow",
    "depends_on_past": False,
    "start_date": airflow.utils.dates.days_ago(1),
    "retries": 1,
    "retry_delay": timedelta(minutes=5),
}

dag = DAG(
    "execution_date_test",
    default_args=default_args,
    catchup=False,
    schedule_interval=None
)

templated_command = """
    echo "execution_date={{ execution_date }}"
    echo "next_execution_date={{ next_execution_date }}"
    echo "prev_execution_date={{ prev_execution_date }}"
"""

t3 = BashOperator(
    task_id="templated",
    bash_command=templated_command,
    dag=dag,
)

実行結果のログ

*** Log file does not exist: /usr/local/airflow/logs/execution_date_test/templated/2021-02-22T12:57:52.434900+00:00/1.log

(省略)

[2021-02-22 12:57:58,851] {{bash_operator.py:115}} INFO - Running command: 
    echo "execution_date=2021-02-22T12:57:52.434900+00:00"
    echo "next_execution_date=2021-02-22T12:57:52.434900+00:00"
    echo "prev_execution_date=2021-02-22T12:57:52.434900+00:00"
[2021-02-22 12:57:58,859] {{bash_operator.py:122}} INFO - Output:
[2021-02-22 12:57:58,860] {{bash_operator.py:126}} INFO - execution_date=2021-02-22T12:57:52.434900+00:00
[2021-02-22 12:57:58,860] {{bash_operator.py:126}} INFO - next_execution_date=2021-02-22T12:57:52.434900+00:00
[2021-02-22 12:57:58,860] {{bash_operator.py:126}} INFO - prev_execution_date=2021-02-22T12:57:52.434900+00:00

(省略)
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?