05

Kỹ sư dữ liệu · Bước 5/8 · 8 phút

Chất lượng dữ liệu và kiểm thử

Viết những phép kiểm tra bắt được dữ liệu sai trước khi người dùng phát hiện.

Dữ liệu sai là lỗi thường gặp nhất

Pipeline hiếm khi sập một cách ồn ào. Thường gặp hơn là nó chạy thành công và nạp dữ liệu sai: một cột bị đổi tên ở phía nguồn, một đơn vị tiền tệ thay đổi, một ngày thiếu dữ liệu. Job báo xanh, còn dashboard thì sai mà không ai hay.

Mục tiêu của bạn là để những lỗi này lộ ra sớm và rõ, trước khi chuyên viên phân tích đem chúng trình bày với ban giám đốc.

Các phép kiểm tra cơ bản

Bắt đầu với vài phép kiểm tra trên mỗi bảng quan trọng. Khoá là duy nhất và không rỗng. Giá trị nằm trong tập cho phép, như trạng thái đơn hàng. Khoá ngoại khớp với một dòng ở bảng liên quan. Số dòng nằm trong khoảng hợp lý so với hôm qua. Dữ liệu còn mới, tức là mốc thời gian gần nhất không quá cũ.

Công cụ như dbt cho phép khai báo các test này ngay cạnh model. Great Expectations và Soda là những lựa chọn phổ biến khác. Một câu SQL đơn giản trả về các dòng sai cũng là một test.

Thoả thuận với phía nguồn

Nhiều sự cố bắt đầu từ một thay đổi bạn không hề biết. Data contract (hợp đồng dữ liệu) là thoả thuận với đội tạo ra dữ liệu về schema và ý nghĩa của nó. Nó có thể chỉ đơn giản là một tài liệu chung và một cảnh báo khi schema thay đổi.

Kiểm thử cả code

Test dữ liệu kiểm tra dữ liệu. Unit test kiểm tra logic biến đổi của bạn bằng đầu vào nhỏ, đã biết trước. Đưa cả hai vào quản lý phiên bản và chạy tự động trước khi thay đổi được đưa lên. Đây cũng là kỷ luật của kỹ sư phần mềm, và nhà tuyển dụng tìm kiếm điều đó.

Thử ngay

Viết năm test cho một bảng

  1. 1.Dùng các bảng quán cà phê ở bước 2, hoặc bất kỳ bảng nào bạn có.
  2. 2.Hỏi chatbot bằng câu lệnh bên dưới.
  3. 3.Chạy từng truy vấn trong DuckDB. Một test tốt trả về 0 dòng khi dữ liệu lành.
  4. 4.Cố tình làm hỏng dữ liệu, ví dụ chèn một dòng trùng, và xác nhận có test bắt được.
Đây là schema bảng của tôi: [dán câu CREATE TABLE, không kèm dữ liệu thật]. Viết năm test dữ liệu bằng SQL, mỗi test trả về các dòng sai: khoá duy nhất, không rỗng, giá trị cho phép, kiểm tra khoá ngoại, và độ mới. Giải thích mỗi test bảo vệ khỏi điều gì.
Pipeline chạy thành công, nhưng dữ liệu hôm qua chỉ bằng một nửa số dòng thường ngày. Test nào sẽ bắt được?

Tự kiểm tra

Pipeline chạy thành công, nhưng dữ liệu hôm qua chỉ bằng một nửa số dòng thường ngày. Test nào sẽ bắt được?

Đọc thêm