我创建了一个DAG,其时间表间隔为“ * / 10 * * * *” 。但是,当我通过Airflow UI(在 2020年7月1日07:50:00 )将DAG切换为“开”时。它会自动触发,而无需等待完成指定的时间间隔。
#Specified start date
start_date : datetime.strptime('01/07/2020 06:35:00', '%m/%d/%Y %H:%M:%S')
我尝试通过向仍然面临相同问题的dag_args添加'catchup':False
答案 0 :(得分:0)
这是由于您提供的START_DATE错误。根据cron表达式“ * / 10 * * * *”,您的dag将每10分钟触发一次。当您在01/07/2020 07:50:00取消暂停时,立即触发运行ID 01/07/2020 07:40:00。
首先,我建议您为start_date使用常量,因为动态值会根据调度程序评估的气流管道而无法预期地起作用。
在我写的FAQ条目中,有关start_date的更多信息,请整理并整理:https://airflow.apache.org/faq.html#what-s-the-deal-with-start-date
现在,关于execution_date及其触发时间,这是Airflow入门人员的常见陷阱。 Airflow会根据其覆盖的计划周期的左边界(而不是触发时间)(即周期的右边界)来设置execution_date。例如,当运行schedule ='@ hourly'任务时,任务将每小时触发一次。在2pm触发的任务的执行日期为1pm,因为它假定您正在处理2pm的1pm到2pm时间窗口。同样,如果您执行日常工作,则执行日期为2016-01-01的运行将在2016-01-02午夜之后立即触发。
从ETL和差分负载的角度考虑时,这种左边界标记很有意义,而在以简单的类似cron的调度器的角度考虑时,就会变得混乱。