我想在 dbt 中创建一个 for 循环,循环遍历数据库中表的两列,并使用两列中每一行中的值创建 case when 语句。就像这样:
{% set locations = {'%United-States%':'United States', '%USA%':'United States'} %}
select
case
{% for feeder, correct in locations.items() %}
when lower(locationname) like {{feeder}} then {{correct}}
{% endfor %}
end as city
from table
我能够为 feeder 和 Correct 都创建列表,但我无法将它们合并为字典的键值对来循环遍历它。关于我应该如何做到这一点有什么想法吗?
听起来你有两个问题:
要记住的重要一点是 dbt-jinja 所做的主要事情是创建 SQL 字符串。也就是说,有一个巧妙的功能可以让您在 jinja 开始将字符串放在一起之前查询数据库。 想法是:
从数据库中获取您想要包含在 SELECT 查询中的值
{% set locations_query %}
select feeder, correct from my_other_table
{% endset %}
{% set locations = run_query(locations_query) %}
select
case
-- not sure how this part will work yet....
{% for feeder, correct in locations.items() %}
when lower(locationname) like {{feeder}} then {{correct}}
{% endfor %}
end as city
from table