【问题标题】:How to get airflow time zone information from macros?如何从宏中获取气流时区信息?
【发布时间】:2020-04-29 19:04:30
【问题描述】:

背景

我正在尝试在周一至周五每天晚上 10 点 America/New_York 运行一次 DAG。 DAG 运行的脚本将其运行的那一天作为输入 时区(周一至周五晚上 10 点)。当我将此脚本作为 Airflow DAG 运行时,日期来自宏 {{ ds_nodash }}

问题

当 Airflow 运行时,到纽约时间晚上 10 点时,已经是 UTC 时间的第二天了。由于Airflow使用UTC,所以执行日期提前一天,所以当我的DAG使用宏{{ ds_nodash }}时,是提前一天。

问题:

有没有办法将时区调整日期作为气流上的宏,或者是我自己调整宏的唯一解决方案?

【问题讨论】:

    标签: airflow


    【解决方案1】:

    根据airflow documentation,默认变量(如{{ ds_nodash }})是UTC。所以,我们需要自己转换它们。它可以是这样的:

    # ...
    local_ds_nodash = '{{ dag.timezone.convert(execution_date).strftime("%Y%m%d") }}'
    # ...
    create_file = BashOperator(
        task_id='create_file',
        bash_command=f'touch {local_ds_nodash}.txt'
    )
    

    【讨论】:

      【解决方案2】:

      我认为您可能会混淆气流中的两个不同概念。

      1. 其实'ds'并不是任务运行的日期,它是任务运行的前一个周期。例如,对于 ds 是 2019 年 3 月 25 日,它将在 2019 年 3 月 26 日而不是 25 日运行。因此,如果您希望您的任务在周一至周五准确运行,您需要将 schedule_interval 设置为“0 22 * * 1-5”。工作日设置应为“1-5”而不是“2-6”。

      2. 对于时区,kaxil 的回答已经很好地解释了。但是如果由于某种原因,您无法更改气流服务器配置,您需要做的是将 schedule_interval 调整为 '0 2 * * 2-6'。然后任务将按预期运行。

      【讨论】:

      • 由于 Airflow 文档不建议更改时区,因此我将其保留为 utc,但在 DAG 中添加了 tzinfo=pendulum.timezone('America/New_York') DAG。然后,当我将例如 schedule_interval 定义为“0 22 * * 1-5”时,这将在纽约时间周一至周五 22:00 运行,正确与否?
      • 如果你这样设置:start_date=datetime(2019,3, 23, tzinfo=pendulum.timezone('America/New_York'))0 22 * * 1-5应该没问题。但我没有任何机会测试它。所以我不建议你这样做,因为工作日设置可能会在这些计算中导致一些意想不到的结果。为什么不直接使用'0 2 * * 2-6'?
      【解决方案3】:

      时区功能现在可在 Airflow 中使用。查看https://airflow.readthedocs.io/en/1.10.2/timezone.html 并相应地调整airflow.cfg 中的配置。

      默认是

      [core]
      default_timezone = utc
      

      调整为

      [core]
      default_timezone = America/New_York
      

      execution_date 将包含您可以提取的 TZ 信息。在推广到生产环境之前先在测试环境中试用。

      【讨论】:

      • 我已经尝试过了,但它对我不起作用。对我有用的是为每个 dag 定义一个时区。无论哪种方式,我的问题都是关于如何提取特定时区的执行日期。
      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多