每天在特定时间运行 DAG

时间:2021-06-24 09:50:28

标签: airflow airflow-scheduler

我已经多次阅读有关 schedule_intervalstart_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_datesstart_date = datetime.datetime(2021,6,23) 但它没有被执行。

如果我用 days_ago(0) 替换 days_ago(1) 它总是落后 1 天,即它今天没有运行但昨天运行了

有没有一种简单的方法可以说“我现在部署我的 DAG,我想用这个 cron 语法执行它”(我认为这是大多数人想要的)而不是计算执行时间,基于在 start_dateschedule_interval 和弄清楚,如何解释它?

1 个答案:

答案 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,这将在运行时间和要考虑的时间间隔之间解耦 - 但正如前面提到的,这尚未最终确定.