运行dbt run出现'my_project_name'包名重复错误,如何排查?
排查dbt包名重复错误("my_project_name"重复)
运行dbt run时出现dbt found more than one package with the name "my_project_name" included in this project错误,即便你确认profiles.yml和dbt_project.yml配置一致且未引入其他包,可按以下步骤排查:
排查步骤
- 检查项目中是否存在
packages.yml文件:哪怕你没主动引入包,若该文件存在,里面可能意外添加了本地项目的引用(比如- local: ./),导致dbt把当前项目当成外部包重复加载。 - 检查子目录中的
dbt_project.yml:如果项目有子模块或嵌套目录,子目录里若存在dbt_project.yml且name字段也设为my_project_name,dbt会将其识别为另一个同名包。 - 清理
dbt_packages目录:之前安装过的包可能残留该目录中,若某个包的dbt_project.yml里的name刚好和你的项目名一致,就会触发冲突。直接删除整个dbt_packages目录再重试。 - 运行
dbt clean清理缓存:dbt的缓存可能保留了旧的配置信息,清理后再执行dbt run。 - 检查配置加载路径:执行
dbt debug命令,查看输出中显示的配置文件路径,确认dbt只加载了预期的profiles.yml和项目根目录的dbt_project.yml,没有加载其他位置的同名配置文件。
需要交叉验证的参数
- 根目录
dbt_project.yml的name字段:确保只有根目录的这个文件定义了name: my_project_name,所有子目录的dbt_project.yml必须使用不同名称。 - 若存在
packages.yml:确认其中没有引用当前项目的本地路径,避免重复加载。 dbt_packages目录内的包配置:检查每个包的dbt_project.yml的name字段,排除与你的项目名重复的情况。- profiles.yml与dbt_project.yml的匹配:确认dbt_project.yml中的
profile字段值,和profiles.yml中的顶级配置名完全一致(当前你的配置是匹配的,这一步可快速确认)。
你提供的配置文件
profiles.yml
my_project_name: outputs: dev: type: postgres threads: 4 host: hostname port: 5432 user: username pass: password dbname: db schema: schemaname prod: type: postgres threads: [1 or more] host: [host] port: [port] user: [prod_username] pass: [prod_password] dbname: [dbname] schema: [prod_schema] target: dev
dbt_project.yml
config-version: 2 name: my_project_name version: 1.0 profile: my_project_name macro-paths: ["macros"]
内容的提问来源于stack exchange,提问作者averma
相关产品推荐
相关产品推荐

