我已经多次阅读有关 schedule_interval
、start_date
和 Airflow 文档的多个示例,但我仍然无法理解:
如何在每天的特定时间执行我的 DAG?例如,现在是 9:30 (AM),我部署了我的 DAG,我希望它在 10:30 执行
我试过了
with DAG(
"test",
default_args=default_args,
description= "test",
schedule_interval = "0 10 * * *",
start_date = days_ago(0),
tags = ["goodie"]) as dag:
但由于某种原因,今天没有运行。我尝试了不同的 start_dates
和 start_date = datetime.datetime(2021,6,23)
但它没有被执行。
如果我用 days_ago(0)
替换 days_ago(1)
它总是落后 1 天,即它今天没有运行但昨天运行了
有没有一种简单的方法可以说“我现在部署我的 DAG,我想用这个 cron 语法执行它”(我认为这是大多数人想要的)而不是计算执行时间,基于在 start_date
、schedule_interval
和弄清楚,如何解释它?
答案 0 :(得分:1)
如果我用 days_ago(1) 替换 days_ago(0) 它总是落后 1 天
它不落后。您只是将 Airflow 调度机制与 cron 作业混淆了。在 cron 作业中,您只需提供一个 cron 表达式并进行相应安排 - 这不是它在 Airflow 中的工作方式。
在 Airflow 中,调度是通过 start_date
+ schedule interval
计算的。 Airflow 在间隔结束时执行作业。这与数据管道通常的工作方式一致。今天您正在处理昨天的数据,因此在这一天结束时,您希望启动一个处理昨天记录的流程。
原则上 - 切勿使用动态开始日期。
设置:
with DAG(
"test",
default_args=default_args,
description= "test",
schedule_interval = "0 10 * * *",
start_date = datetime(2021,06,23, 10 ,0), # 2021-06-23 10:00
tags = ["goodie"]) as dag:
表示第一个将在 2021-06-24 10:00
开始,此运行 execution_date
将是 2021-06-23 10:00
。第二次运行将于 2021-06-25 10:00
开始,本次运行 execution_date
将是 2021-06-24 10:00
由于这对许多新用户来说是一个困惑的根源,因此正在进行架构更改 AIP-39 Richer scheduler_interval,这将在运行时间和要考虑的时间间隔之间解耦 - 但正如前面提到的,这尚未最终确定.