如何从宏获取气流时区信息?

时间:2019-03-21 21:55:38

标签: airflow

背景

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

派生的

问题

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

问题:

是否有一种方法可以将时区调整后的日期作为气流的宏获取,还是我自己调整宏的唯一解决方案?

3 个答案:

答案 0 :(得分:0)

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信息。在推广到生产环境之前,请在测试环境中进行尝试。

答案 1 :(得分:0)

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

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

  2. 对于时区,kaxil的答案解释得很好。但是,如果由于某些原因您无法更改气流服务器配置,则需要将schedule_interval调整为“ 0 2 * * 2-6”。然后任务将按预期运行。

答案 2 :(得分:0)

根据airflow documentation,默认变量(例如['S63.SI'] )以UTC表示。因此,我们需要自己进行转换。它可以像这样:

self.bot.delete_message(chat_id=self.chat.id,
                               message_id=temp_msg,
                                    caption=' ',
                                    reply_markup=None)