如何在dbt中通过{{ this }}引用模型SQL文件所在文件夹?
在dbt中获取模型SQL文件所在文件夹的方法
dbt的this对象没有直接提供folder属性,但可以通过以下两种方法获取模型文件所在的文件夹路径:
- 方法一:拆分路径提取文件夹
this.path会返回当前模型文件相对于项目根目录的完整路径(例如models/marts/sales/fact_sales.sql),通过Jinja的字符串拆分和拼接操作,去掉路径末尾的文件名部分即可得到文件夹路径:
{% set path_segments = this.path.split('/') %} {% set model_folder = '/'.join(path_segments[:-1]) %} select '{{ model_folder }}' as model_folder, '{{ this.path }}' as full_file_path
- 方法二:字符串替换移除文件名
利用this.name获取模型的文件名(不含.sql后缀),结合Jinja的replace过滤器移除文件名及后缀,直接得到文件夹路径:
select '{{ this.path | replace(this.name ~ ".sql", "") }}' as model_folder
补充:如果是引用其他包中的模型,this.path会包含包名前缀(例如my_package/models/staging/stg_orders.sql),若仅需包内的文件夹路径,可以对路径做进一步拆分处理。
内容的提问来源于stack exchange,提问作者bellotto
相关产品推荐
相关产品推荐

