DBT执行报错:依赖的源pizza.src_sqlserver_pizzas未找到,请求协助解决
问题背景
我在schema.yml中定义了如下源:
sources: - name: src_pizzas database: test_db schema: pizza tables: - name: src_sqlserver_pizzas columns: - name: size description: "The size of the pizza" - name: price .......
随后在models/example目录下创建模型tsnfrmed_sqlserver_pizzas.sql:
{{ config(materialized='view') }} SELECT UPPER(size) AS size, UPPER(price) AS price, UPPER(pizza_id) AS pizza_id, UPPER(pizza_type_id) AS pizza_type_id FROM {{ source('src_pizzas', 'src_sqlserver_pizzas') }}
执行命令:
dbt run --select "tsnfrmed_sqlserver_pizzas"
出现错误:
Model 'model.pizza_data.tsnfrmed_sqlserver_pizzas' (models\example\tsnfrmed_sqlserver_pizzas.sql) depends on a source named 'pizza.src_sqlserver_pizzas' which was not found
已知表名与连接均正常,其他模型可正常连接,不排除拼写错误问题。
解决方案
检查schema.yml的存放路径
DBT要求源定义的schema.yml必须放在models目录(含子目录)下,若文件在其他位置(如根目录自定义的src文件夹且未配置sources路径),DBT无法识别。将schema.yml移至models目录或其子目录,比如models/schema.yml或models/example/schema.yml。验证拼写与大小写一致性
确认模型中source('src_pizzas', 'src_sqlserver_pizzas')的参数与schema.yml里的name: src_pizzas、name: src_sqlserver_pizzas完全一致,注意部分环境下大小写敏感,避免因大小写不匹配导致识别失败。检查dbt_project.yml的sources配置
打开项目根目录的dbt_project.yml,确认sources配置是否正确。若自定义了sources路径,需确保schema.yml在指定路径范围内:sources: pizza_data: # 替换为你的DBT项目名称 schema: pizza tables: - name: src_sqlserver_pizzas若使用默认配置,只要schema.yml在models目录下即可。
用dbt debug验证源
执行以下命令直接验证源是否可被识别:dbt debug --select source:src_pizzas.src_sqlserver_pizzas该命令会检测源的存在性与连接状态,帮助区分是识别问题还是连接问题。
清理缓存后重试
DBT会缓存源信息,修改schema.yml后缓存可能未更新。先清理缓存:dbt clean再重新运行模型命令:
dbt run --select tsnfrmed_sqlserver_pizzas
内容的提问来源于stack exchange,提问作者Ankit

