我目前在DBT中使用Jinja来创建这三个集合,它们都工作得很好:
{% set value1 %}
select
category1,
category2,
category3,
category4
from {{ ref('table') }}
where category1 = 'value1'
order by category2
{% endset %}
{% set value2 %}
select
category1,
category2,
category3,
category4
from {{ ref('table') }}
where category1 = value2
order by category2
{% endset %}
{% set value3 %}
select
category1,
category2,
category3,
category4
from {{ ref('table') }}
where category1 = value3
order by category2
{% endset %}
我想知道是否有一种方法可以通过使用for循环来压缩这三个集合的创建。
这是我的尝试:
{% set attributes = ('value1', 'value2', 'value3') %}
{% for i in attributes%}
{% set {{i}} %}
select
category1,
category2,
category3,
category4
from {{ ref('table') }}
where category1 = {{i}}
order by category2
{% endset %}
{% endfor %}
我一直遇到关于for循环中set的第一行的错误。我已经尝试了几种方法来编写它,在for循环中改变语法,但没有任何效果。
我想知道我是否可以以任何方式重新创建三个集合的输出,这将比必须写出所有三个集合更谦虚?
您的用例似乎非常适合使用宏:
定义宏:
{% macro get_set(value) %}
select
category1,
category2,
category3,
category4
from {{ ref('table') }}
where category1 = {{ value }}
order by category2
{% endmacro %}
然后使用:
{{ get_set('value1') }}
{# and #}
{{ get_set('value2') }}
{# and #}
{{ get_set('value3') }}