PAYATHON 2026

Elementary 测试生成的 SQL 为何返回零失败?

数据阿明

结论

从这段 SQL 看,测试查询确实执行了。结果显示零失败,是因为内部查询没有返回任何行,并不表示测试被跳过。

dbt 测试通常通过返回失败记录来表达测试结果,外层查询再统计这些记录。这里,内部查询创建了一行 num = 1 的数据,却用 where num = 2 进行过滤,因此没有匹配的行:

with nothing as (select 1 as num)
select * from nothing where num = 2

外层的 count(*) 因而得到 0,should_warn 和 should_error 也都是 false。这表示查询没有发现失败记录,通常说明测试通过。

如何确认测试状态

  1. 检查 dbt test 或触发该测试的命令输出,确认测试是否被选中执行,以及最终状态是 PASS、SKIP 还是其他状态。
  2. 查看对应的 run_results.json 和运行日志,核对测试节点的执行状态与失败数量。
  3. 如果想验证测试能否报错,可以暂时把过滤条件改为会返回一行的条件,例如 where num = 1。此时外层统计结果应为 1,测试会检测到一条失败记录。验证后再恢复原条件。

如果运行结果显示测试为 SKIP、没有对应节点,或者命令输出中没有该测试,仅凭这段生成的 SQL 还无法判断跳过原因。需要进一步检查测试选择条件、配置和执行日志。以上解释依据示例 SQL 的执行逻辑。

备注:内容仅供参考。