使用 dbt 遍历列表的 for 循环
for loop that iterates over a list using dbt
我刚开始使用 dbt,我想问问社区,我接下来要向您解释的内容是否可以在 dbt 的宏中完成。
我的想法是使用 for 循环遍历值列表,并在我的查询中使用列表中的每个值。
示例:
list_of_variables: [x, y]
我在 list_of_variables
select
如果我在 column_x 然后 'found' 否则 'not found' 结束
来自 table_1
你知道应该怎么做吗?查看了一些 dbt 文档,但找不到答案。
谢谢!
是的,可以做到。您需要为此使用 Jinja 模板。
例如,您有一个列列表:[X,Y,Z],然后您可以像这样对其进行迭代:
Select
{% for col in columns %}
case when {{col}} in {{ "column"~ "_" ~ col}} then "Found" else "Not Found" end as {{col}},
{% endfor %}
from table
以上dbt是Bigquery语法。这将生成:
Select
case when X in column_X then "Found else "Not Found" end as X,
case when Y in column_Y then "Found else "Not Found" end as Y,
case when Z in column_Z then "Found else "Not Found" end as Z,
from table
如果你不想在 Z 之后 , 也就是之前你可以写成 :
Select
{% for col in columns %}
case when {{col}} in {{ "column"~ "_" ~ col}} then "Found" else "Not Found" end as {{col}}
{% if not loop.last %} , {% endif %}
{% endfor %}
from table
这将为您生成 Z 后不带逗号的查询。
Select
case when X in column_X then "Found else "Not Found" end as X,
case when Y in column_Y then "Found else "Not Found" end as Y,
case when Z in column_Z then "Found else "Not Found" end as Z
from table
您可以从这里阅读更多关于 Jinja 的信息:dbt jinja
我刚开始使用 dbt,我想问问社区,我接下来要向您解释的内容是否可以在 dbt 的宏中完成。
我的想法是使用 for 循环遍历值列表,并在我的查询中使用列表中的每个值。
示例:
list_of_variables: [x, y]
我在 list_of_variables
select 如果我在 column_x 然后 'found' 否则 'not found' 结束 来自 table_1
你知道应该怎么做吗?查看了一些 dbt 文档,但找不到答案。
谢谢!
是的,可以做到。您需要为此使用 Jinja 模板。
例如,您有一个列列表:[X,Y,Z],然后您可以像这样对其进行迭代:
Select
{% for col in columns %}
case when {{col}} in {{ "column"~ "_" ~ col}} then "Found" else "Not Found" end as {{col}},
{% endfor %}
from table
以上dbt是Bigquery语法。这将生成:
Select
case when X in column_X then "Found else "Not Found" end as X,
case when Y in column_Y then "Found else "Not Found" end as Y,
case when Z in column_Z then "Found else "Not Found" end as Z,
from table
如果你不想在 Z 之后 , 也就是之前你可以写成 :
Select
{% for col in columns %}
case when {{col}} in {{ "column"~ "_" ~ col}} then "Found" else "Not Found" end as {{col}}
{% if not loop.last %} , {% endif %}
{% endfor %}
from table
这将为您生成 Z 后不带逗号的查询。
Select
case when X in column_X then "Found else "Not Found" end as X,
case when Y in column_Y then "Found else "Not Found" end as Y,
case when Z in column_Z then "Found else "Not Found" end as Z
from table
您可以从这里阅读更多关于 Jinja 的信息:dbt jinja