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

2024-02-02

我想在 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

我能够为供给者和正确者创建列表,但我无法将它们合并为字典的键值对以循环遍历它。关于我应该如何执行此操作有什么想法吗?


听起来你有两个问题:

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

需要记住的重要一点是 dbt-jinja 所做的主要事情是创建 SQL 字符串。也就是说,有一些巧妙的功能可以让您查询数据库beforejinja 开始把绳子串起来。

这个想法是:

  1. 从数据库中获取您想要包含在 SELECT 查询中的值
  2. 在呈现语句时将先前获取的值填充到查询中

第一步可能会用到两个宏:

  • 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(使用前将#替换为@)

如何在 dbt jinja 中将两个表连接到字典中 的相关文章

  • 按属性对对象列表进行分组

    我需要对对象列表进行分组 Student 使用属性 Location 特定对象 代码如下 public class Grouping public static void main String args List
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • Clojure 的映射和减少 Monad...Juxt Monad 怎么样?

    在学习 Clojure 的过程中 我花了很长时间试图理解 monad 它们是什么以及我们如何使用它们 但没有取得太大成功 然而 我发现了一个很棒的 Monads for Dummies 视频系列 http vimeo com 2071730
  • Firefox 中出现图像映射问题

    我的图像地图无法在 Firefox 中运行 但可以在 Chrome 和 Safari 中运行 我认为这与 div 内的一些标签有关 你们能帮帮我吗 因为我对此不太了解 div style font size 14px img src dat
  • Javascript for 循环和 setTimeout 问题

    所以我认为下面的代码确实很简单 但却变得很令人头疼 它应该是一个循环 将改变对象的不透明度 使其消失 function doSomething var i 10 for i 10 i gt 0 i i 1 setTimeout setOpa
  • 未找到角度映射文件

    我刚刚下载了 angular min js 的新副本 并且在 angular min js map 上收到了 404 但我没有将其包含在我的代码中 Chrome 中的错误 GET http angular dev js angular mi
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • 无法使用 Python 循环分页 API 响应

    所以 我对这个感到摸不着头脑 使用 HubSpot 的 API 我需要获取我客户的 门户 帐户 中所有公司的列表 遗憾的是 标准 API 调用一次只能返回 100 家公司 当它返回响应时 它包含两个参数 使分页响应成为可能 其中之一是 ha
  • Dart 中的 DoubleLinkedQueue 和 ListQueue 有什么区别?

    Dart 核心 API 有两个类实现Queue
  • 在python中合并3个dict()

    如果多个字典之间有公共字符串 是否有逻辑合并多个字典的方法 即使这些公共字符串在一个 dict 的值与另一个 dict 的键之间匹配 我在 SO 上看到了很多类似的问题 但似乎没有一个问题能解决我将 较低级别文件 中的多个键与较高键 值中的
  • 计算列表中的子列表

    L 2 4 5 6 2 1 6 6 3 2 4 5 3 4 5 我想知道任意子序列出现了多少次 s 2 4 5 例如会返回2次 I tried L count s 但它不起作用 因为我认为它期望寻找类似的东西 random numbers
  • 根据前 2 个元素从嵌套列表中删除重复项

    仅当前两个元素相同时 我才尝试从嵌套列表中删除重复项 而忽略第三个元素 List L el1 el2 value1 el3 el4 value2 el1 el2 value2 el1 el5 value3 将返回 L el3 el4 val
  • Haskell:处理死锁的自引用列表

    GHC 允许永久阻止以下内容是否有任何有用的理由 list 1 tail list 看起来列表迭代器 生成器有点复杂 我们应该能够做一些更有用的事情 Return error Infinitely blocking list Return
  • 查找字典中某个项目对应的键

    有什么方法可以找到与 VBA 字典中给定项目相对应的键吗 http msdn microsoft com en us library aa164502 28v office 10 29 aspx http msdn microsoft co
  • 在 C++ 中,为什么我们不能使用 > 和 < 来比较迭代器? [复制]

    这个问题在这里已经有答案了 我被问过这个问题 我真的不知道为什么 如果你有指针int x 您可以将指针与 gt and lt 因为它代表内存位置 例如0x0000 0x0004 0x0008等等 我知道迭代器和指针是不同的 但它们的行为方式
  • 交替附加两个列表中的元素

    我有三个包含元素的列表 a 0 1 2 3 b 5 6 7 8 c 我想附加元素a and b into c to get c 0 1 5 6 2 3 7 8 基本做法 gt gt gt a 0 1 2 3 gt gt gt b 5 6 7
  • 字典 使用 Automapper 映射到对象

    我有一个像这样的课程 public User class public string Name get set public string Age get set 用像这样的字典 Dictionary
  • Python 多处理 imap

    今天我再次有一个关于多处理的问题 我有一个小示例代码 import multiprocessing def function a v a 2 w a 3 x a 4 y a 5 z a 6 b 1 2 3 4 5 6 7 8 9 10 if
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • 将 python 字典翻译为 C++

    我有包含以下代码的 python 代码 d d 0 0 0 d 1 2 1 d 2 1 2 d 2 3 3 d 3 2 4 for i j in d print d i j d j i 不幸的是 对于我的目的来说 循环遍历 python 中

随机推荐