You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让dbt采用dbt_project.yml中配置的schema而非源定义中的名称?

问题解答

一、能否让dbt优先使用dbt_project.yml中定义的schema作为源(source)的schema?

可以实现,但需明确:你在dbt_project.yml中为business-unit-x下层级配置的是模型输出schema,而源(source)的schema是用来指定源数据所在的数据库schema,两者属于不同配置体系。要让dbt优先使用自定义schema而非source的name,你可以在dbt_project.yml的sources区块统一配置源的默认schema,覆盖默认用source name作为schema的行为:

在dbt_project.yml中添加以下配置:

sources:
  business-unit-x:
    silver:
      +schema: <你的目标schema名称>  # 填入你之前为silver层级配置的schema名
      # 若需覆盖该目录下所有源,可省略tables,直接设置全局默认

这个配置会让business-unit-x/silver目录下所有未单独指定schema的源,都使用你定义的目标schema,而非source的name。如果源文件中没有显式定义schema属性,dbt会优先读取这里的配置。

二、若需同步源文件的schema属性与dbt_project.yml配置

如果需要直接在源文件中对齐dbt_project.yml的配置,有两种方式:

1. 硬编码指定schema

在business-unit-x/silver目录的源文件(如sources.yml)中,为每个source显式指定schema属性:

sources:
  - name: I_DONT_WANT_TO_BE_USED_AS_SCHEMA
    schema: <你的目标schema名称>  # 与dbt_project.yml中silver层级的schema保持一致
    tables:
      - name: 你的源表名1
      - name: 你的源表名2

2. 使用变量实现同步(推荐)

为避免重复维护,可在dbt_project.yml中定义变量,再在源文件中引用:

  • 第一步:在dbt_project.yml中添加变量
vars:
  silver_target_schema: <你的目标schema名称>
  • 第二步:在源文件中引用变量
sources:
  - name: I_DONT_WANT_TO_BE_USED_AS_SCHEMA
    schema: "{{ var('silver_target_schema') }}"
    tables:
      - name: 你的源表名1

后续只需修改dbt_project.yml中的变量值,所有引用该变量的源文件schema都会自动同步。

内容的提问来源于stack exchange,提问作者linSESH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:02:33