Airflow Apache中的开始日期和计划日期有问题

Airflow Apache中的开始日期和计划日期有问题,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我正在使用Apache airflow,我对计划日期和开始日期有问题 我想让dag每天在UTC上午8:00运行。所以,我所做的是: 默认参数={ “所有者”:“气流”, “依赖于过去”:False, “开始日期”:日期时间(2020,12,7,10,0,0), '电子邮件':['example@emaiil.com'], “失败时发送电子邮件”:True, “重试时发送电子邮件”:False, “重试”:1, “重试延迟”:时间增量(小时=5) } #永远不要跑 dag=dag(dag_id='

我正在使用Apache airflow,我对计划日期和开始日期有问题

我想让dag每天在UTC上午8:00运行。所以,我所做的是:

默认参数={
“所有者”:“气流”,
“依赖于过去”:False,
“开始日期”:日期时间(2020,12,7,10,0,0),
'电子邮件':['example@emaiil.com'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:False,
“重试”:1,
“重试延迟”:时间增量(小时=5)
}
#永远不要跑
dag=dag(dag_id='id',default_args=default_args,schedule_interval='0 8***',catchup=True)
我上传dag的那天是2020-12-07,我想在2020-12-08的08:00:00运行它

我将开始日期设置为2020-12-07的10:00:00,以避免在2020-12-07的08:00:00运行它,并且只在第二天触发它,但它不起作用

我当时所做的是修改开始日期:

默认参数={
“所有者”:“气流”,
“依赖于过去”:False,
“开始日期”:日期时间(2020,12,7,7,59,0),
'电子邮件':['example@emaiil.com'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:False,
“重试”:1,
“重试延迟”:时间增量(小时=5)
}
#永远不要跑
dag=dag(dag_id='etl-ca-cpke-spark_dev_databricks',default_args=default_args,schedule_interval='0 8***',catchup=True)
现在,开始日期是dag运行前1分钟,事实上,由于catchup设置为True,因此在2020-12-07的08:00:00触发了dag,但在2020-12-08的08:00:00没有触发


为什么?

间隔(结束时的气流计划任务)

也就是说,当您这样做时:

start_date: datetime(2020, 12, 7, 8, 0,0)
schedule_interval: '0 8 * * *'
第一次运行将于
2020-12-08
08:00
+-(取决于资源)

本次运行的执行日期为:
2020-12-07 08:00

下一次跑步将于
2020-12-09
08:00

本次运行日期为2020-12-08 08:00


由于今天是
2020-12-08
下一次跑步没有开始,因为它还不是区间的终点。

那么如果我想在
2020-12-08
开始跑步
08:00
之后每天在
08:00
开始跑步,我应该在开始日期设置开始日期:
2020-12-06 08:00
?我不明白为什么如果开始日期是
2020-12-07 08:00
,它不会在2020-12-07 08:00和2020-12-08:00上运行。你在解释
start\u date
就像cronjob一样,你可以指定时间和开始日期。这不是气流的工作原理。气流采用开始日期+间隔,在此期间结束后开始运行。这背后的逻辑是,当您编写希望在间隔结束时通过窗口->今天运行的ETL时,您希望处理昨天的数据。然后,如果我想修改dag,从明天开始每天08:00:00开始计划,那么应该设置什么开始日期?使用相同的逻辑。运行在间隔结束时开始,因此
start_date=datetime(2020,12,8,8,0,0)
08***
的间隔将在
2020-12-09 08:00结束,此时第一次运行将开始。请注意,此运行的执行日期为
2020-12-08 08:00