dbt 编写自定义通用测试

以前简单介绍或dbt 的数据测试(包含了通用测试以及异常测试),通用测试可复用性比较高,是比较推荐的选择
而且通用测试的扩展能力也是比较强大的,可以直接引用模型,自定义配置

一个参考使用

version: 2
 
models:
  - name: orders
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: status
        tests:
          - accepted_values:
              values: ['placed', 'shipped', 'completed', 'returned']
      - name: customer_id
        tests:
          - relationships:
              to: ref('customers') # 通过ref 引用模型
              field: id

参考自定义

一般通用测试需要包含model需要测试的模型以及column_name需要test的列,如果需要扩展新的,直接添加后边就行了

  • 参考定义
{% test relationships(model, column_name, field, to) %}
 
with parent as (
 
    select
        {{ field }} as id
 
    from {{ to }}
 
),
 
child as (
 
    select
        {{ column_name }} as id
 
    from {{ model }}
 
)
 
select *
from child
where id is not null
  and id not in (select id from parent)
 
{% endtest %}
  • 参考使用
version: 2
 
models:
  - name: people
    columns:
      - name: account_id
        tests:
          - relationships:
              to: ref('accounts') # 通过ref 引用模型
              field: id

一个其他玩法

比如dq-tools 这个工具就使用了jinja2 kwargs 的特性获取一些其他参数

  • 参考使用
{% test accepted_values_where_db(model, values) %}
 
{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}
{% set where = kwargs.get('where', kwargs.get('arg')) %}
{% set severity_level = kwargs.get('severity_level', 'warn') %}
{% set kpi_category = kwargs.get('kpi_category', 'Accuracy') %}
{% set p_invocation_id = invocation_id %}
{% set model_text = model | replace("'", "''") %}
 
....
  • config 使用

通用test 中可以包含自己的config

{% test warn_if_odd(model, column_name) %}
 
    {{ config(severity = 'warn') }}
 
    select *
    from {{ model }}
    where ({{ column_name }} % 2) = 1
 
{% endtest %}

说明

dbt 的test 目前来说扩展性还是很不错的,不少基于dbt 的数据质量框架都会基于此进行扩展,使用起来也是很方便的

参考资料

macros/generic_tests/test_recency_db.sql
https://docs.getdbt.com/docs/build/data-tests
https://docs.getdbt.com/reference/data-test-configs
https://docs.getdbt.com/reference/resource-properties/data-tests
https://docs.getdbt.com/best-practices/writing-custom-generic-tests

posted on   荣锋亮  阅读(44)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-06-19 nginx 1.25.1 发布
2022-06-19 amass OWASP开源的深入的攻击面映射和资产发现工具
2021-06-19 spring boot cors 动态添加以及cookie 处理
2019-06-19 vigil rpm 包制作
2018-06-19 minio 集群搭建
2017-06-19 openresty 使用 log_by_lua 发送日志到 syslog-ng
2017-06-19 uuid 了解

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示