我想在 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
我能够为供给者和正确者创建列表,但我无法将它们合并为字典的键值对以循环遍历它。关于我应该如何执行此操作有什么想法吗?
听起来你有两个问题:
- 从另一个表中获取数据,并且
- 使用该数据填充 case when 语句。
需要记住的重要一点是 dbt-jinja 所做的主要事情是创建 SQL 字符串。也就是说,有一些巧妙的功能可以让您查询数据库beforejinja 开始把绳子串起来。
这个想法是:
- 从数据库中获取您想要包含在 SELECT 查询中的值
- 在呈现语句时将先前获取的值填充到查询中
第一步可能会用到两个宏:
-
run_query()
(docs https://docs.getdbt.com/reference/dbt-jinja-functions/run_query), and
- dbt-utils'
get_query_results_as_dict()
(docs https://github.com/dbt-labs/dbt-utils#get_query_results_as_dict-source)
像这样的东西可能会起作用(前提是您已经安装了 dbt-utils:
{% 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)