【问题标题】:How to make airflow scheduling trigger on start_date instead of execution_date (make execution_date equal to start_date)?如何在 start_date 而不是 execution_date 上触发气流调度(使 execution_date 等于 start_date)?
【发布时间】:2019-09-23 03:06:49
【问题描述】:

来自https://airflow.apache.org/scheduler.html

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

这个功能很伤人。

例如我有每天运行的 etl 作业,schedule_interval 是0 1 * * *,所以它会在 2019-09-22 01:00:00 触发 2019-09-23 01:00:00 作业。但是我的 etl 正在处理 start_date 之前的所有数据,这意味着数据范围介于 (history, 2019-09-23 00:00:00) 之间,我们不能使用datetime.now(),因为这无法重现。这迫使我在 execution_date 上增加 1 天:

etl_end_time = "{{ (execution_date + macros.timedelta(days=1)).strftime('%Y-%m-%d 00:00:00') }}"

但是,当我需要使用 schedule_interval 45 2,3,4,5,6 * * * 运行作业时,2019-09-22 06:45:00 作业将在 2019-09-23 02:45:00 上运行,即 execution_date (下一个执行时间) 之后的一天。我不得不更改 schedule_interval 45 2,3,4,5,6,7 * * * 并在最后一次运行时放置一个虚拟运算符,而不是增加一天。 在这种情况下,您不需要在 execution_date 中添加一天,这意味着您必须定义两个 etl_end_time 来表示具有不同 schedule_interval 的作业中的相同日期。

所有这些对我来说都很不舒服,是否有任何配置或内置方法可以使 execution_date 等于 start_date ?或者我必须修改气流源代码...

【问题讨论】:

    标签: python airflow airflow-scheduler


    【解决方案1】:

    对于计划运行,next_execution_date 将返回触发的确切时间。

    【讨论】:

      【解决方案2】:

      我发现有一个公关 https://github.com/apache/airflow/pull/5787

      此更改引入了属性 schedule_interval_edge,一个字符串 包含“开始”或“结束”到 DAG。调度程序使用 确定 DAG 是否应在开始或 计划间隔结束。

      同名的参数也被添加到 default_airflow.cfg 在 [scheduler] 部分。

      我在这个公关里拿了代码。

      【讨论】:

        猜你喜欢
        • 2020-12-07
        • 1970-01-01
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多