如何在 dbt jinja 中将两个表连接成字典

问题描述 投票:0回答:2

我想在 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 都创建列表,但我无法将它们合并为字典的键值对来循环遍历它。关于我应该如何做到这一点有什么想法吗?

list loops dictionary jinja2 dbt
2个回答
2
投票

听起来你有两个问题:

  1. 从另一个表中获取数据,并且
  2. 使用该数据填充 case when 语句。

要记住的重要一点是 dbt-jinja 所做的主要事情是创建 SQL 字符串。也就是说,有一个巧妙的功能可以让您在 jinja 开始将字符串放在一起之前查询数据库。 想法是:

从数据库中获取您想要包含在 SELECT 查询中的值
  1. 在渲染语句时将之前获取的值填充到查询中
  2. 第一步可能会用到两个宏:

    run_query()
  • 文档
    )和 dbt-utils'
  • get_query_results_as_dict()
  • 文档
  • 这样的东西可能会起作用(前提是您已经安装了 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



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.