Bỏ qua để đến nội dung

Kiểm thử dữ liệu (tests) trong dbt: chặn số sai từ gốc

Câu hỏi đắt giá nhất trong phân tích: “Số này có đúng không?”. dbt trả lời bằng kiểm thử dữ liệu — bạn khai báo kỳ vọng về dữ liệu, dbt chạy kiểm tra mỗi lần buildbáo đỏ ngay khi có gì sai. Số sai bị chặn trước khi kịp chạy tới dashboard.

Bốn kiểm thử có sẵn, phủ phần lớn nhu cầu. Khai báo trong file .yml cạnh model:

models/_models.yml
models:
- name: stg_don_hang
columns:
- name: don_hang_id
tests:
- unique # không trùng
- not_null # không rỗng
- name: trang_thai
tests:
- accepted_values:
values: ['moi', 'da_thanh_toan', 'da_huy']
- name: khach_hang_id
tests:
- relationships: # khóa ngoại hợp lệ
to: ref('stg_khach_hang')
field: khach_hang_id
TestĐảm bảo
uniqueCột không có giá trị trùng (vd khóa chính)
not_nullCột không rỗng
accepted_valuesGiá trị nằm trong tập cho phép
relationshipsMọi khóa ngoại đều khớp bảng cha (toàn vẹn tham chiếu)

Singular tests — kiểm thử bằng SQL tùy biến

Phần tiêu đề “Singular tests — kiểm thử bằng SQL tùy biến”

Quy tắc phức tạp hơn? Viết một câu SQL trong tests/ trả về các dòng SAI. Test đạt khi truy vấn trả về 0 dòng:

-- tests/khong_co_doanh_thu_am.sql
select don_hang_id, gia_tri
from {{ ref('mart_doanh_thu') }}
where gia_tri < 0

Nếu có đơn doanh thu âm, test trả về dòng đó → fail. Logic kiểm tra đọc như tiếng người.

  • dbt test chạy mọi test; dbt build chạy model test theo đúng DAG.
  • Đặt mức độ: severity: warn (chỉ cảnh báo) hay error (dừng pipeline). Cho phép ngưỡng: chỉ fail khi quá N dòng sai.
tests:
- not_null:
config:
severity: warn

Cài dbt_expectations để có hàng chục test sẵn (kiểu giá trị, khoảng số, định dạng ngày, độ lệch phân phối…) — lấy cảm hứng từ Great Expectations, rất hợp khi cần kiểm soát chất lượng chặt.

Chia sẻ: