Airflow 如何从宏中获取气流时区信息?
背景 我试着从周一到周五,每天晚上10点在美国/纽约运行一次DAG。DAG运行的脚本在其运行的当天作为输入 时区(周一至周五晚上10点)。当我把这个纸条作为一个DAG运行时,日期是从宏Airflow 如何从宏中获取气流时区信息?,airflow,Airflow,背景 我试着从周一到周五,每天晚上10点在美国/纽约运行一次DAG。DAG运行的脚本在其运行的当天作为输入 时区(周一至周五晚上10点)。当我把这个纸条作为一个DAG运行时,日期是从宏{{ds_nodash}} 问题 当气流运行时,纽约时间晚上10点,UTC时间已经是第二天了。由于Airflow使用UTC,执行日期提前一天,因此当我的DAG使用宏{{ds_nodash}}时,它提前一天 问题: 是否有办法将时区调整日期作为气流上的宏获取,或者是我自己调整宏的问题的唯一解决方案?现在气流中提供了时
{{ds_nodash}}
问题
当气流运行时,纽约时间晚上10点,UTC时间已经是第二天了。由于Airflow使用UTC,执行日期提前一天,因此当我的DAG使用宏{{ds_nodash}}
时,它提前一天
问题:
是否有办法将时区调整日期作为气流上的宏获取,或者是我自己调整宏的问题的唯一解决方案?现在气流中提供了时区功能。查看并相应地调整
afflow.cfg
中的配置
默认情况下是这样的
[core]
default_timezone = utc
调整到
[core]
default_timezone = America/New_York
然后,执行日期将包含您可以提取的TZ信息。在您进入生产环境之前,请在测试环境中试用。我想您可能会弄乱气流中的两个不同概念
{{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'
)
我已经试过了,但它对我不起作用。对我来说,有效的方法是为每个dag定义一个时区。不管怎样,我的问题是如何提取特定时区的执行日期。由于气流文档没有建议更改时区,我将其保留为
utc
,但在args
中添加了tzinfo=be摆.timezone('America/New_York')
perDAG
。然后,当我将时间表间隔定义为“0 22**1-5”时,它将在周一至周五纽约时间22:00运行,正确与否?如果这样设置:start\u date=datetime(2019,3,23,tzinfo=be摆时区(“美国/纽约”)
,0 22**1-5
。但我没有机会测试它。因此,我不建议您这样做,因为工作日设置可能会在这些计算中导致一些意外的结果。为什么不直接使用“02**2-6”?