气流:为什么运营商有start_date?

时间:2018-02-07 09:54:48

标签: airflow airflow-scheduler

我不明白为什么我们需要为运营商(任务实例)提供'start_date'。我们传递给DAG的那个不应该足够吗?

另外,如果当前时间是2018年2月7日上午8点30分UTC,现在我将dag的start_date设置为2018年2月7日上午0.00点,我的cron表达式为时间间隔为30 9 * * *(每天上午9点30分) ,即期待在接下来的1小时内运行)。我的DAG今天上午9点30分或明天(2月8日上午9点30分)运行吗?

4 个答案:

答案 0 :(得分:8)

关于任务实例上的start_date,我个人从未使用过这个,我总是只有一个DAG start_date。

但是从我可以看到,这将允许您指定某些任务在与主DAG不同的时间开始。这似乎是一个遗留功能,通过阅读常见问题解答,他们建议使用时间传感器来代替这种类型的东西,只需要一个start_date用于通过DAG传递的所有任务。

你的第二个问题:

根据您的日程安排,运行的执行日期始终是上一期间。

来自文档(Airflow Docs)

  

请注意,如果您在一天的schedule_interval上运行DAG,则会在2016-01-01T23:59之后不久触发标记为2016-01-01的运行。换句话说,作业实例一旦它所涵盖的时间段结束就会启动。

澄清:

  • 如果按日计划设置,则在8日将执行第7个。
  • 如果设置为每周安排在星期日运行,则此星期日的执行日期将是上周日。

答案 1 :(得分:1)

某些复杂的需求可能需要在任务级别上有特定的时间安排。例如,在某些聚合日志记录任务开始运行之前,我可能希望DAG每天运行整整一周,因此,可以在任务级别设置不同的开始日期。

更多有用的信息...通过气流DAG类源来看,似乎将start_date设置为DAG级别只是意味着当没有默认值时将其传递给任务任务start_date通过default_args字典传递到DAG,或者在每个任务级别未定义特定的start_date时传递给DAG。因此,对于希望同时启动DAG中的所有任务(除了依赖关系)的任何情况,在DAG级别设置start_date就足够了。

答案 2 :(得分:0)

只需添加到此处已存在的内容即可。依赖于另一个任务的任务的开始日期必须大于其依赖项的开始日期。

例如:

  • 如果 task_a 取决于 task_b
  • 你不能拥有
    • task_a开始日期= 1/1/2019
    • task_b开始日期= 2019/1/2
    • 否则,task_a在2019年1月1日将无法运行,因为task_b在该日期将不会运行,并且您也无法将其标记为已完成

你为什么要这个?

  • 我本来喜欢这个任务的逻辑,它是一个外部任务传感器,等待另一个dag的完成。但是另一个dag在当前dag之后有开始日期。因此,在其他dag不存在的几天里,我不希望依赖存在

答案 3 :(得分:0)

很可能未按照以下说明设置任务的dag参数: https://stackoverflow.com/a/61749549/1743724