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

dbt运行模型时重复拼接profiles与project配置中schema名称的问题求助

dbt运行模型时重复拼接profiles与project配置中schema名称的问题求助

嗨,这个问题我之前也碰到过,核心原因是dbt默认的schema命名逻辑在搞鬼!

默认情况下,dbt会把profiles.yml里设置的schema作为基础前缀,然后把你在dbt_project.yml里用+schema指定的自定义schema拼在后面,所以你这里两个都是openair,就变成了openair_openair。

给你几个可行的解决办法,按需选就行:

方法1:直接覆盖schema(最直接)

把dbt_project.yml里的+schema改成不带+的schema,这样会完全替换掉profiles.yml里的schema配置,而不是拼接:

models:
  +transient: false
  profile_name:
    openair:
      +database: XX
      schema: openair  # 去掉前面的+号,直接设置schema
      +materialized: table

方法2:自定义schema生成逻辑(适合全局统一规则)

如果你的项目里有多个模型组需要统一这个规则,可以在macros文件夹下新建一个宏文件(比如macros/generate_schema_name.sql),重写默认的generate_schema_name逻辑,让它直接返回你指定的自定义schema,不拼接前缀:

{% macro generate_schema_name(custom_schema_name, node) -%}
    {%- set default_schema = target.schema -%}
    {%- if custom_schema_name is none -%}
        {{ default_schema }}
    {%- else -%}
        {{ custom_schema_name }}  # 直接用自定义schema,跳过拼接
    {%- endif -%}
{%- endmacro %}

这个宏会让所有设置了+schema的模型直接用你指定的名称,不会再和profiles.yml里的schema拼接。

方法3:运行时指定schema(临时应急用)

如果只是临时测试,不想改配置,可以在运行dbt命令的时候直接指定schema:

dbt run --schema openair

这个参数会覆盖所有配置文件里的schema设置,直接生成指定名称的schema。

至于你说其他系统类似配置没问题,大概率是那些系统要么用了上面的自定义宏,要么profiles.yml里的schema和dbt_project.yml里的+schema是不同值,或者他们在dbt_project.yml里用的是不带+的schema配置,你可以对比下其他系统的配置文件确认下~

备注:内容来源于stack exchange,提问作者averma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:03:03