首页/数据/数据工程与 ETL 速查/dbt 自定义测试与严重级别

dbt 自定义测试与严重级别

除通用测试外,dbt 支持在 tests 目录写单条 SQL 作为自定义测试:查询返回任何行即失败;结合 config 的 severity 与 warn_if、error_if 阈值,可把不同严重度的校验分开处理。

自定义测试tests 目录下 .sql,返回行即失败
严重级别severity: error 或 warn
阈值error_if / warn_if 表达式
范围可针对特定分区过滤

自定义测试 SQL

自定义测试 SQL
-- tests/assert_pay_amount_non_negative.sql
select order_id, pay_amount
from {{ ref('dwd_trade_order_detail_di') }}
where pay_amount < 0

带阈值与级别

带阈值与级别
-- tests/assert_row_count_not_drop.sql
{{ config(severity='warn', error_if='> 1000', warn_if='> 100') }}
select count(1) as bad_rows
from {{ ref('dwd_trade_order_detail_di') }}
where dt = '2026-10-11' and order_id is null
把基数类校验(行数骤降)设为 warn、把键完整性问题设为 error,能避免流水线被轻微波动频繁打断。

易错点

  • 自定义测试返回聚合结果,语义不清(应返回违规行)
  • warning 级别长期无人处理,逐渐被忽略

数据来源与参考

  • dbt 官方文档:Singular Tests 与 severity 配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌