Airflow:为什么运营商有 start_date?
Airflow: Why is there a start_date for operators?
我不明白为什么我们需要 'start_date' 操作员(任务实例)。我们传递给 DAG 的那个还不够吗?
此外,如果当前时间是 UTC 时间 2018 年 2 月 7 日上午 8 点半,现在我将 dag 的 start_date 设置为 2018 年 2 月 7 日上午 0 点,我的 cron 表达式的计划间隔为 30 9 * * *(每天上午 9 点 30 分,即预计在接下来的 1 小时内 运行)。我的 DAG 运行 是今天上午 9 点还是明天(2 月 8 日上午 9 点)?
关于 start_date 任务实例,我个人从未使用过它,我总是只有一个 DAG start_date。
但是据我所知,这将允许您指定某些任务在与主 DAG 不同的时间开始。看来这是一项遗留功能,通过阅读常见问题解答,他们建议对此类事物使用时间传感器,并且只为通过 DAG 传递的所有任务设置一个 start_date。
你的第二个问题:
运行 的执行日期始终是根据您的日程安排的前一个时期。
来自文档 (Airflow Docs)
Note that if you run a DAG on a schedule_interval of one day, the run stamped 2016-01-01 will be trigger soon after 2016-01-01T23:59. In other words, the job instance is started once the period it covers has ended.
澄清一下:
- 如果设置为每日计划,则在 8 号执行 7 号。
- 如果将每周计划设置为运行星期日,则本星期日的执行日期为上星期日。
一些复杂的要求可能需要在任务级别进行特定的计时。例如,我可能希望我的 DAG 在某个聚合日志记录任务开始 运行 之前整周每天 运行,因此为了实现这一点,我可以在任务级别设置不同的开始日期。
更多有用的信息...查看气流 DAG
class 源似乎在 DAG 级别设置 start_date
仅仅意味着它被传递到当没有通过 default_args
字典将任务 start_date 的默认值传递给 DAG 时,或者在每个任务级别上没有定义特定 start_date
时的任务。因此,对于您希望 DAG 中的所有任务同时启动的任何情况(依赖关系除外),在 DAG 级别设置 start_date
就足够了。
只是为了添加到这里已有的内容。依赖于另一个任务的任务的开始日期必须 >= 到其依赖项的开始日期。
例如:
- 如果task_a取决于task_b
- 你不能有
- task_a start_date = 2019 年 1 月 1 日
- task_b start_date = 2019 年 1 月 2 日
- 否则,task_a 将不会 运行 在 2019 年 1 月 1 日启用,因为 task_b 不会 运行 在该日期启用,您无法将其标记为完成或者
你为什么要这个?
- 我会喜欢这个任务逻辑,它是一个等待另一个 dag 完成的外部任务传感器。但是另一个 dag 的开始日期在当前 dag 之后。因此,在另一个 dag 不存在的日子里,我不希望存在依赖关系
很可能没有设置任务的 dag 参数,如下所述:
我不明白为什么我们需要 'start_date' 操作员(任务实例)。我们传递给 DAG 的那个还不够吗?
此外,如果当前时间是 UTC 时间 2018 年 2 月 7 日上午 8 点半,现在我将 dag 的 start_date 设置为 2018 年 2 月 7 日上午 0 点,我的 cron 表达式的计划间隔为 30 9 * * *(每天上午 9 点 30 分,即预计在接下来的 1 小时内 运行)。我的 DAG 运行 是今天上午 9 点还是明天(2 月 8 日上午 9 点)?
关于 start_date 任务实例,我个人从未使用过它,我总是只有一个 DAG start_date。
但是据我所知,这将允许您指定某些任务在与主 DAG 不同的时间开始。看来这是一项遗留功能,通过阅读常见问题解答,他们建议对此类事物使用时间传感器,并且只为通过 DAG 传递的所有任务设置一个 start_date。
你的第二个问题:
运行 的执行日期始终是根据您的日程安排的前一个时期。
来自文档 (Airflow Docs)
Note that if you run a DAG on a schedule_interval of one day, the run stamped 2016-01-01 will be trigger soon after 2016-01-01T23:59. In other words, the job instance is started once the period it covers has ended.
澄清一下:
- 如果设置为每日计划,则在 8 号执行 7 号。
- 如果将每周计划设置为运行星期日,则本星期日的执行日期为上星期日。
一些复杂的要求可能需要在任务级别进行特定的计时。例如,我可能希望我的 DAG 在某个聚合日志记录任务开始 运行 之前整周每天 运行,因此为了实现这一点,我可以在任务级别设置不同的开始日期。
更多有用的信息...查看气流 DAG
class 源似乎在 DAG 级别设置 start_date
仅仅意味着它被传递到当没有通过 default_args
字典将任务 start_date 的默认值传递给 DAG 时,或者在每个任务级别上没有定义特定 start_date
时的任务。因此,对于您希望 DAG 中的所有任务同时启动的任何情况(依赖关系除外),在 DAG 级别设置 start_date
就足够了。
只是为了添加到这里已有的内容。依赖于另一个任务的任务的开始日期必须 >= 到其依赖项的开始日期。
例如:
- 如果task_a取决于task_b
- 你不能有
- task_a start_date = 2019 年 1 月 1 日
- task_b start_date = 2019 年 1 月 2 日
- 否则,task_a 将不会 运行 在 2019 年 1 月 1 日启用,因为 task_b 不会 运行 在该日期启用,您无法将其标记为完成或者
你为什么要这个?
- 我会喜欢这个任务逻辑,它是一个等待另一个 dag 完成的外部任务传感器。但是另一个 dag 的开始日期在当前 dag 之后。因此,在另一个 dag 不存在的日子里,我不希望存在依赖关系
很可能没有设置任务的 dag 参数,如下所述: