用途:为 dbt 模型补充 schema 测试与数据质量校验。适合在 schema.yml 中添加或修改测试、按项目既有风格编写测试、运行测试并修复失败项。
主要能力与用法:
- 先研究项目现有测试风格,务必匹配后再新增。可用 find . -name "schema.yml" -exec grep -l "tests:" {} ; 查找含测试的 schema.yml,阅读 models/staging/schema.yml、models/marts/schema.yml,检查 tests/ 目录与 packages.yml,提取 YAML 格式、覆盖深度、是否用 dbt_utils/dbt_expectations/自定义宏、描述风格与严重级别。
- 阅读模型 SQL 识别主键、外键、分类列、日期列与业务关键字段;再检查该模型已有测试。
- 按列类型选测试:主键用 unique 与 not_null;外键用 not_null 与 relationships;分类列用 accepted_values(需向用户确认合法值);必填字段与日期时间用 not_null;布尔用 accepted_values: [true, false]。在 schema.yml 中按项目既有风格编写,包含 version、models、columns、description 与 tests 层级。
- 运行测试:dbt test --select <model_name>,或 dbt test --select +<model_name> 含上游。
- 修复失败:unique 失败多为重复记录,需在模型中去重;not_null 失败多为源 NULL,可 COALESCE 或过滤;relationships 失败为孤儿记录,加 WHERE 或修上游;accepted_values 失败为新值,更新取值列表。
测试类型:内置通用测试 unique、not_null、accepted_values、relationships;自定义通用测试如 dbt_utils.expression_is_true、dbt_utils.recency;singular 测试在 tests/ 下建 SQL,例如 select * from {{ ref('orders') }} where revenue < 0。
反模式:未先查项目模式就加测试、YAML 风格不一致、模型无任何测试、主键缺少 unique 与 not_null 之一、只测明显列而忽略业务关键列、未经相关方确认就硬编码 accepted_values、项目未用 dbt_utils 却加该包测试。
限制:资料未提供安装方式、依赖版本、支持平台与收费信息。