如何在dbt脚本及Jinja循环中调用dbt_project.yml的字典变量?
dbt嵌套变量调用及循环遍历的正确方式
单个嵌套变量调用失败的解决方法
你在dbt_project.yml中定义的变量配置(注意:dbt的变量块应为vars:而非var:,可能是笔误):
vars: event: event_1: start_date: 1 end_date: 2 event_2: start_date: 1 end_date: 2
你之前用{{ var("event['event_1']['start_date']") }}调用失败,原因是var()函数的参数只能是顶层变量名,不能直接传入嵌套路径。正确调用方式是先通过var("event")获取整个字典,再用键访问嵌套值:
# 方式1:方括号语法 {{ var("event")['event_1']['start_date'] }} # 方式2:点语法(键名不含特殊字符时可用) {{ var("event").event_1.start_date }}
循环遍历嵌套变量的正确写法
你之前的循环代码无效,问题有两个:一是变量名写错(你定义的是event而非event_variables),二是.e会静态访问名为e的键,而非循环变量e的动态值。正确代码如下:
{% set events = ["event_1", "event_2"] %} {% for e in events %} {{ var("event")[e].start_date }} {% endfor %}
代码说明:
var("event")先拿到顶层的event字典- 循环中用
[e]动态访问字典里对应event_1、event_2的子字典 - 最后通过
.start_date取出对应日期值
内容的提问来源于stack exchange,提问作者Skylar
相关产品推荐
相关产品推荐

