使用{% if execute %}的dbt宏是否总是需要else语句?



我正在使用jinja在dbt中编写一个宏,如下所示:

{% if execute %}
{% set parameters = results.columns[0].values() %}
{% else %}
{% set parameters = [] %}
{% endif %}

我的问题是,我应该包括else语句,即使它运行时没有它?当我删除第3行和第4行时,我的模型编译并运行,但从哲学上讲,我认为每个"如果"都是正确的。语句应该有一个转义。事实并非如此吗?

我尝试删除if语句,只运行

{% set parameters = results.columns[0].values() %}

返回错误"'None'没有属性'table'"

不需要else分支。当你有一个没有else分支的if语句时,如果语句为假,它将什么也不做。

如果有帮助的话,你可以把它看作一个隐式的else分支(它将参数"设置"为未定义)

您得到的错误告诉您需要一个if execute。当DBT需要执行一些SQL来编译模型时,就会发生这种情况;这通常会失败,因为DBT通常在执行之前编译所有模型,但是if execute允许您将编译延迟到执行点。

最新更新