使用 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