我有一个DAG计划在每个星期一的10AM
运行。这是我的dag定义
DAG = models.DAG(
dag_id="etl", schedule_interval="0 10 * * 1", start_date=datetime(2018, 10, 1),
default_args=args
)
latest_only = LatestOnlyOperator(task_id="latest", dag=DAG)
extract = PythonOperator(
task_id="extract", python_callable=extract, dag=DAG)
extract.set_upstream(latest_only)
它在每个星期一的10AM
触发。它于今天(05/06/2019)运行,但预定的日期为2019-04-29 14:00:00
任务实例具有以下日期
execution_date : 2019-04-29T14:00:00+00:00
start_date : 2019-05-06 14:19:48.527488+00:00
end_date : 2019-05-06 14:19:54.225001+00:00
它在上周一(4/29)正确的日期运行良好,并且在历史记录中它现在显示2在4/29运行。可能是什么原因造成的?
答案 0 :(得分:3)
有一个chapter on Scheduling in the Airflow documentation,其中指出:
请注意,如果您以一天的schedule_interval运行DAG,则在2016-01-01T23:59之后不久将触发标记为2016-01-01的运行。换句话说,作业实例所涵盖的时间段结束后便开始启动。
让我们重复一遍。计划程序会在开始日期之后(周期结束时)一个schedule_interval运行您的作业。
您正经历着这样的情况:今天(2019-05-06)为最新的“完成”间隔(即从2019-04-29开始的一周)创建了一个DagRun。
这样思考可能会有所帮助:如果要定期处理一些数据,则需要在该时间段内的数据准备就绪后开始处理。
答案 1 :(得分:2)
Airflow在每个间隔的末尾安排一个dag,并以执行时间作为该间隔的开始。因此通常 execution_time = schedule_time-interval 。
例如,在您的dag中,最后一个间隔是2019-04-29T14:00:00到2019-05-06T14:00:00,并且仅在2019-05-06T14:00:00安排执行执行时间为2019-04-29T14:00:00。这是气流的正常工作。正如您在问题中提到的那样,不确定您的dag是如何在5月6日下午2点之前于2019-04-29T14:00:00运行的。也许您更改了间隔时间或进行了手动触发。