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

dbt通用测试内部执行失败:返回0行却预期1行,求解决方案

解决dbt测试报错:Returned 0 rows, but expected 1 row

1. 检查自定义通用测试的逻辑是否写反

如果是你自己编写的no_nulls类通用测试宏,大概率是断言逻辑搞反了:

  • 错误逻辑示例:测试查询目标是统计无null值的行,但dbt默认通用测试的通过条件是「返回0行」(即不存在不符合规则的数据),这种情况下若表无null值或为空,就会触发报错。
{% macro test_no_nulls(model, column_name) %}
select count(*) as count
from {{ model }}
where {{ column_name }} is not null
{% endmacro %}
  • 修正逻辑:测试查询应定位存在null值的行,只要返回0行(无违规数据),测试就会通过。
{% macro test_no_nulls(model, column_name) %}
select {{ column_name }}
from {{ model }}
where {{ column_name }} is null
{% endmacro %}

2. 确认目标模型是否有数据

如果dim_listings_cleansed模型是空表,即使测试逻辑正确,也可能因无数据返回0行触发报错:

  • 执行dbt run --select dim_listings_cleansed,确认模型是否生成有效数据;
  • 检查模型SQL的过滤条件,是否因规则过严导致无输出。

3. 排查测试配置与权限问题

如果使用dbt自带的not_null测试(通过schema.yml配置),报错可能源于:

  • 版本兼容问题:升级dbt对应数据库适配器到最新稳定版;
  • 数据库权限:手动在数据库执行测试对应SQL(如select listing_id from dbtlearn.dim_listings_cleansed where listing_id is null),确认是否有权限访问该表、能否正常返回结果。

4. 检查测试与模型的引用正确性

确认测试名称no_nulls_in_dim_listings_cleansed对应的宏存在,模型dim_listings_cleansed在项目中定义正确,无拼写错误。


内容的提问来源于stack exchange,提问作者t0rres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:20:33