dbt项目schema配置异常求助:dbt_project.yml与profiles.yml配置问题
dbt schema配置异常:生成拼接格式schema的解决方法
问题现象
执行dbt run后,生成的模型表schema出现landing_silver、landing_gold这类拼接格式,与预期的silver、gold等独立schema不符。
当前配置文件
dbt run执行结果
1 of 4 OK created sql table model landing_silver.dd ............................ [SELECT 1 in 0.31s] 09:39:27 2 of 4 OK created sql table model landing_gold.ddd ............................. [SELECT 1 in 0.30s] 09:39:27 4 of 4 OK created sql table model landing_bronze.prueba22 ...................... [SELECT 1983 in 0.33s] 09:39:27 3 of 4 OK created sql table model landing_landing.prueba2 ...................... [SELECT 1983 in 0.34s]
dbt_project.yml配置
models: project: 00_landing: +schema: landing +materialized: table 01_bronze: +schema: bronze +materialized: table 02_silver: +schema: silver +materialized: table 03_gold: +schema: gold +materialized: table
profiles.yml配置
dbt_ibercaja: # 必须与dbt_project.yml中的"profile"一致 target: dev outputs: dev: # 省略其他配置 schema: landing # 省略其他配置
原因分析
dbt中,+schema属于相对schema配置,会将profiles.yml里target.schema的值(此处为landing)作为前缀,与模型的+schema值用下划线拼接,最终生成landing_silver这类格式的schema。
解决方法
方法一:使用绝对schema配置(推荐)
将dbt_project.yml中的+schema改为schema(去掉加号),直接指定模型的目标schema,覆盖前缀拼接逻辑:
models: project: 00_landing: schema: landing materialized: table 01_bronze: schema: bronze materialized: table 02_silver: schema: silver materialized: table 03_gold: schema: gold materialized: table
方法二:移除profiles.yml中的基础schema配置
删除profiles.yml中dev环境下的schema: landing配置(或留空),此时target.schema为空,+schema的值会直接作为最终schema:
dbt_ibercaja: # 必须与dbt_project.yml中的"profile"一致 target: dev outputs: dev: # 省略其他配置 # 移除或注释掉schema: landing这一行 # 省略其他配置
验证
修改配置后重新执行dbt run,生成的模型表schema将变为预期的landing、bronze、silver、gold。
内容的提问来源于stack exchange,提问作者Pablo Pamies Pérez
相关产品推荐
相关产品推荐

