如何用Jinja从dbt的sources.yml中提取<database>.<schema>格式内容?
用Jinja从dbt的sources.yml提取.格式内容
针对你给出的sources.yml配置,有两种简单的Jinja实现方式来提取my_project.my_schema这种格式的字符串:
方法1:针对特定source提取
如果你明确要提取某个source(比如示例里的my_source)的数据库+schema,直接用dbt内置的source()宏获取对应属性后拼接即可:
{% set target_source = source('my_source', 'items') %} {{ target_source.database }}.{{ target_source.schema }}
执行后会直接输出my_project.my_schema。这里source()的第二个参数填该source下任意一张表名就行(示例里是items),因为同一个source下的表共享database和schema配置。
方法2:遍历所有sources提取
如果需要批量处理所有已配置的sources,用dbt上下文里的graph.sources变量遍历即可:
{% for source in graph.sources.values() %} {{ source.database }}.{{ source.schema }} {% endfor %}
这段代码会逐个输出每个source对应的<database>.<schema>字符串,对于你的示例配置,同样会输出my_project.my_schema。
说明
dbt会自动把sources.yml里的配置加载到Jinja上下文的graph对象中,直接调用内置变量或宏比手动解析yml文件更可靠,也能适配dbt的环境变量、配置覆盖等场景。
内容的提问来源于stack exchange,提问作者justcode
相关产品推荐
相关产品推荐

