如何在Jinja模板中仅输出已定义的dbt变量?现有尝试失败
解决dbt Jinja模板中变量存在时才输出语句的问题
你的代码无法工作的核心原因是:dbt的var()函数在变量未定义时会直接抛出编译错误,根本不会执行到is defined的判断逻辑。也就是说,只要my_variable没定义,模板编译阶段就会失败,而不是跳过那段WHERE语句。
这里提供两种可行的解决方式:
方式一:使用var()的默认参数
给var()设置一个none作为默认值,然后判断该值是否不为空:
{% set my_var = var('my_variable', none) %} {% if my_var is not none %} WHERE f.source_date < '{{ my_var }}'::DATE {% endif %}
当my_variable未定义时,my_var会被设为none,此时判断条件不成立,不会输出WHERE语句;变量存在时则正常渲染。
方式二:检查variables字典
dbt的模板上下文里有一个variables对象,包含所有已定义的变量,直接检查该变量是否在字典中:
{% if 'my_variable' in variables %} WHERE f.source_date < '{{ var('my_variable') }}'::DATE {% endif %}
这种方式直接判断变量是否存在于已定义的集合中,避免了var()函数在未定义时抛出错误的问题。
内容的提问来源于stack exchange,提问作者RoyalTS
相关产品推荐
相关产品推荐

