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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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 了解