dbt 测试简介

dbt 中级

Mike Metzger

Data Engineer

什么是测试?

  • 对 dbt 对象的断言/校验
    • 模型
    • 源与种子(seeds)
  • 用于验证数据符合预期
    • 空值
    • 值在范围内
    • 数据间的关系
    • 自定义测试(稍后介绍)
dbt 中级

测试类型

dbt 提供三类测试:

  1. 内置(4 个预定义)
  2. 单一(singular)*
  3. 通用(generic)*

$$

  • 将在稍后介绍
dbt 中级

内置测试

  • unique
    • 验证所有值唯一
  • not_null
    • 验证无空值
  • accepted_values
    • 验证值在指定列表内
    • values: [a, b, c, d]
  • relationships
    • 验证与特定表/列的关联
    • to: ref('table')
    • field: id
dbt 中级

在哪里编写测试?

  • models/model_properties.yml
    • 文件名可自定义
    • models/schema.yml
  • tests: 小节中定义
version: 2

models:
  - name: taxi_rides_raw
    columns:
      - name: tpep_pickup_datetime
        tests:
          - not_null
      - name: payment_type
        tests:
          - not_null
          - accepted_values:
              values: [1, 2, 3, 4, 5, 6]
dbt 中级

运行测试

  • dbt test
    • dbt test --select modelname
  • 验证输出是否通过
  • 若失败,查看编译后的 SQL

dbt 测试失败输出

dbt 中级

定位失败

  1. 找到编译后的 SQL 代码
  2. 路径:target/compiled/projectname/models/model_properties.yml
    • target/compiled/nyc_yellow_taxi/models/model_properties.yml/
  3. 找到对应的 .sql 文件(与失败的测试匹配)
  4. 复制内容到数据库客户端,定位问题
  5. 从数据中移除问题并重跑 dbt run / dbt test
dbt 中级

Passons à la pratique !

dbt 中级

Preparing Video For Download...