我在dbt项目"base“、"table_1”、"table_2“、”table_3“中有一个子查询列表.
我想加入到一个共同的专栏,id。
我想通过使用for循环宏来避免重复。我的问题是,当我试图引用{ref}}中的子查询名{sub}}时,会出现语法错误。
这是我试过的密码。
{% set subs = ["table_1", "table_2", "table_3"] %}
SELECT
{% for sub in subs %}
{{sub}}.* EXCEPT (id),
{% endfor %}
base.*
FROM {{ref('base')}} as base
{% for sub in subs %}
LEFT JOIN {{ref({{sub}})}} as {{sub}}
ON {{sub}}.id = base.id
{% endfor %}
我得到一个语法错误
expected token ':', got '}'
如果我改变到
LEFT JOIN {{ref("'"{{sub}}"'")}} as {{sub}}
我知道这个错误
expected token ',', got '{'
最后用
LEFT JOIN {{ref("{{sub}}")}} as {{sub}}
我得到了
Model depends on a node named '{{sub}}' which was not found
以下是我读过的几页,但找不到解决办法
发布于 2022-03-23 15:15:36
当您使用ref()
时,您已经在表达式子句({{..}}
)中了,因此您不需要添加另一个表达式子句来引用您的subs。
{% set subs = ["table_1", "table_2", "table_3"] %}
SELECT
{% for sub in subs %}
{{sub}}.* EXCEPT (id),
{% endfor %}
base.*
FROM {{ref('base')}} as base
{% for sub in subs %}
LEFT JOIN {{ ref(sub) }} as {{sub}}
ON {{sub}}.id = base.id
{% endfor %}
但是,如果您的子查询实际上是在同一模型中使用with
sql子句的子查询,则不需要使用ref()
,因为它们不是dbt模型。为了更好地理解ref()
,您可以查看文档
{% set subs = ["table_1", "table_2", "table_3"] %}
SELECT
{% for sub in subs %}
{{sub}}.* EXCEPT (id),
{% endfor %}
base.*
FROM {{ref('base')}} as base
{% for sub in subs %}
LEFT JOIN {{ sub }}
ON {{sub}}.id = base.id
{% endfor %}
https://stackoverflow.com/questions/71587425
复制相似问题