Airflow 2.11.0中传递带时区转换的logical_date至dbt模型报错
Airflow 2.11.0中传递带时区转换的logical_date到dbt的解决方案
问题原因
Airflow 2.x版本对模板变量的属性访问逻辑做了调整,直接在Jinja模板中调用in_timezone方法会触发变量未定义的报错,旧版本的语法不再兼容。
解决方法
方法一:使用Airflow内置模板过滤器tz_convert
Airflow提供了专门的时区转换过滤器tz_convert,符合新版本模板语法规范,替换原有代码即可:
dbt_task = DbtTaskGroup( select=["mymodel"], operator_args={ "vars": { "logical_date_to_use_in_model": "{{ logical_date | tz_convert('America/Vancouver') }}" }, }, )
方法二:通过Jinja模板调用标准时区转换方法
如果偏好直接使用Python方法,可在模板中调用astimezone配合pytz完成转换(Airflow默认已安装pytz):
dbt_task = DbtTaskGroup( select=["mymodel"], operator_args={ "vars": { "logical_date_to_use_in_model": "{{ logical_date.astimezone(pytz.timezone('America/Vancouver')) }}" }, }, )
若需要特定格式(如ISO字符串),可追加.isoformat():
"logical_date_to_use_in_model": "{{ (logical_date.astimezone(pytz.timezone('America/Vancouver'))).isoformat() }}"
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

