Airflow DAG 中“schedule_interval=None”和“start_date=airflow.utils.dates.days_ago(n)”的含义?
Meaing of `schedule_interval=None` and `start_date=airflow.utils.dates.days_ago(n)` in an Airflow DAG?
我不明白如何解释 Airflow DAG 中 schedule_interval=None
和 start_date=airflow.utils.dates.days_ago(3)
的组合。如果 schedule_interval
是 '@daily'
,那么(我认为)下面的 DAG 会等待第二天的开始,然后每天三次 运行,回填 days_ago(3)
.我知道因为 schedule_interval=None
,它必须手动启动,但我不理解除此之外的行为。 days_ago(3)
有什么意义?
dag = DAG(
dag_id="chapter9_aws_handwritten_digit_classifier",
schedule_interval=None,
start_date=airflow.utils.dates.days_ago(3),
)
你的困惑是可以理解的。这也让 Airflow 调度程序感到困惑,这就是为什么对 start_date 使用动态值被认为是一种不好的做法。引用自Airflow FAQ:
We recommend against using dynamic values as start_date
这是因为 Airflow 以 start_date
为基准,以 schedule_interval
为周期来计算 DAG 调度。当到达周期结束时,DAG 被触发。然而,当 start_date
是动态的时,存在周期永远不会结束的风险,因为基数总是在“移动”。
为了减轻您的困惑,只需将 start_date 更改为某个静态值,然后它对您来说就有意义了。
还注意到您提到的指南是在 AIP-39 Richer scheduler_interval was implemented. Starting Airflow 2.2.0 it's much easier to schedule DAGs. You can read about Timetables
in the documentation 之前编写的。
我不明白如何解释 Airflow DAG 中 schedule_interval=None
和 start_date=airflow.utils.dates.days_ago(3)
的组合。如果 schedule_interval
是 '@daily'
,那么(我认为)下面的 DAG 会等待第二天的开始,然后每天三次 运行,回填 days_ago(3)
.我知道因为 schedule_interval=None
,它必须手动启动,但我不理解除此之外的行为。 days_ago(3)
有什么意义?
dag = DAG(
dag_id="chapter9_aws_handwritten_digit_classifier",
schedule_interval=None,
start_date=airflow.utils.dates.days_ago(3),
)
你的困惑是可以理解的。这也让 Airflow 调度程序感到困惑,这就是为什么对 start_date 使用动态值被认为是一种不好的做法。引用自Airflow FAQ:
We recommend against using dynamic values as start_date
这是因为 Airflow 以 start_date
为基准,以 schedule_interval
为周期来计算 DAG 调度。当到达周期结束时,DAG 被触发。然而,当 start_date
是动态的时,存在周期永远不会结束的风险,因为基数总是在“移动”。
为了减轻您的困惑,只需将 start_date 更改为某个静态值,然后它对您来说就有意义了。
还注意到您提到的指南是在 AIP-39 Richer scheduler_interval was implemented. Starting Airflow 2.2.0 it's much easier to schedule DAGs. You can read about Timetables
in the documentation 之前编写的。