dbt添加Git包触发Schema无效错误,如何解决?
解决dbt包引用的Validator Schema错误问题
环境信息
- dbt版本:1.5.11
- 终端:iTerm
- 包类型:Git(托管于GitHub)
- 使用Fivetran官方包的fork版本
配置情况
在项目顶层packages.yml中添加的fork包配置如下:
packages: ... - git: "https://github.com/thleo/dbt_mixpanel__no_quotes.git" revision: c0b9cc2eec45ccc7b909132f360e76278ae00c25 name: "mixpanel__no_quotes"
报错信息
运行该包关联的模型时,触发以下验证错误:
Validator Error: {'git': 'https://github.com/thleo/dbt_fivetran_utils__no_quotes.git', 'revision': '34722549847a7eb6be1d2a97c0eb358167a0e249', 'name': 'dbt_fivetran_utils__no_quotes', 'version': '>0.1.0'} is not valid under any of the given schemas
已做排查
- 用VSCode的Redhat YAML Language Support验证过所有YAML文件,格式无语法问题
- 尝试调整引号的使用方式,错误信息未发生变化
- 检查项目内所有包引用文件,仅在深层目录发现一个
projects.yml,内容为:
packages: - local: ../
问题根源
dbt的包引用Schema明确禁止同一个包同时指定git/revision和version字段。报错信息里的dbt_fivetran_utils__no_quotes包配置同时包含了这两个冲突字段,导致验证失败。
解决步骤
定位冲突配置
冲突配置大概率来自你fork的dbt_mixpanel__no_quotes包自身的packages.yml文件——该文件在引用dbt_fivetran_utils__no_quotes时,同时写了git/revision和version字段。修正冲突配置
打开dbt_mixpanel__no_quotes包内的packages.yml,删除version字段,只保留git和revision,示例修正后内容:packages: - git: "https://github.com/thleo/dbt_fivetran_utils__no_quotes.git" revision: "34722549847a7eb6be1d2a97c0eb358167a0e249" name: "dbt_fivetran_utils__no_quotes"更新依赖并验证
清理旧依赖后重新拉取:dbt deps --clean之后运行模型即可验证问题是否解决。
额外说明
dbt 1.5的包引用规则:
- 通过Git源引用包时,必须使用
git+revision(或branch/tag)的组合,不能与version字段混用 version字段仅适用于从dbt Hub拉取的官方包
内容的提问来源于stack exchange,提问作者thleo
相关产品推荐
相关产品推荐

