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。这表示查询没有发现失败记录,通常说明测试通过。
如何确认测试状态
- 检查
dbt test或触发该测试的命令输出,确认测试是否被选中执行,以及最终状态是PASS、SKIP还是其他状态。 - 查看对应的
run_results.json和运行日志,核对测试节点的执行状态与失败数量。 - 如果想验证测试能否报错,可以暂时把过滤条件改为会返回一行的条件,例如
where num = 1。此时外层统计结果应为1,测试会检测到一条失败记录。验证后再恢复原条件。
如果运行结果显示测试为 SKIP、没有对应节点,或者命令输出中没有该测试,仅凭这段生成的 SQL 还无法判断跳过原因。需要进一步检查测试选择条件、配置和执行日志。以上解释依据示例 SQL 的执行逻辑。
备注:内容仅供参考。
