【问题标题】:Airflow Scheduler Pattern气流调度器模式
【发布时间】:2021-09-09 08:54:58
【问题描述】:

是否有一个计划模式可以在一个月内运行 3 次 DAG - 每月的第 5 天、月末前 14 天和月末。

谢谢

【问题讨论】:

    标签: airflow airflow-scheduler


    【解决方案1】:

    另一个选项是在 Cron 表达式中指定日期。 参考这个answer,我们可以在月底使用L。但是,它无法确定月底前的 14 天。我不确定是否可以使用 14 日来表示最后两周。

    建议的 schedule_interval 为 "0 0 5,14,L * *"。但由于 Airflow 将在每个周期结束时运行,执行日期将显示上个月的日期。并且您需要确保 start_date 超过一个月才能开始触发。

    用 Python 解决第 14 天的问题,

    import calendar
    
    last_day = calendar.monthrange("{{ execution_date.year }}", "{{ execution_date.month }}")[1]
    
    schedule_interval = f"0 0 5,{last_day - 14},L * *"
    

    或将Pendulum 方法与execution_date 一起使用:

    last_day = "{{ execution_date.days_in_month }}"
    schedule_interval = f"0 0 5,{last_day - 14},{last_day} * *"
    

    不要忘记在 DAG 中为 Airflow 2.1 或更高版本添加 render_template_as_native_obj=True,以使其输出为 Python 对象而不是字符串。如果它不起作用,则需要将其转换为 int。

    参考cron format in Crontab.guru(那里不支持L字符,所以我用31作为占位符)

    【讨论】:

      【解决方案2】:

      我认为这里最好的解决方案是每天运行你的 DAG,然后检查 execution_date 是否符合你的条件。

      Crontab 表达式只支持转发日。一个月的第5天,应该是'0 0 5 * *',但是倒退是不可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 2017-09-16
        • 2022-08-15
        • 2020-05-08
        相关资源
        最近更新 更多