CodeGym /Các khóa học /SQL SELF /Kiểm tra tính hợp lệ của dữ liệu đã tải lên

Kiểm tra tính hợp lệ của dữ liệu đã tải lên

SQL SELF
Mức độ , Bài học
Có sẵn

Tải dữ liệu từ nguồn ngoài về cũng giống như mời đồng bọn đi làm nhiệm vụ. Bạn muốn chắc chắn là ai cũng đến với đúng tâm thế — hay nói cách khác, đúng định dạng. Chỉ một lỗi nhỏ trong file tải lên cũng có thể khiến bạn phải debug hàng giờ, trả về kết quả sai hoặc làm hỏng dữ liệu trong bảng.

Đôi khi file có thể dính dòng trống, khoảng trắng thừa, trùng lặp hoặc kiểu như có text ở chỗ lẽ ra phải là số. Nếu encoding lại không đúng nữa thì bảng có thể từ chối nhận file luôn.

Để tránh mấy vụ này, quan trọng là phải biết kiểm tra dữ liệu trước — ngay trước khi tải lên hoặc ngay sau khi xong. Giờ mình sẽ chỉ cho bạn cách làm nhé.

Kiểm tra cấu trúc dữ liệu

  1. So sánh cấu trúc bảng với dữ liệu đã tải lên

Bước đầu tiên là đảm bảo dữ liệu được tải đúng theo cấu trúc bảng của bạn. Ví dụ, bạn tạo bảng students để lưu thông tin sinh viên:

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    birth_date DATE,
    email VARCHAR(100) UNIQUE
);

Nếu bạn đã tải dữ liệu vào bảng này, đầu tiên hãy xem thử trong đó có gì:

SELECT * FROM students;

Các dòng trả về sẽ cho bạn thấy tất cả bản ghi trong bảng. Nếu cấu trúc dữ liệu trong file CSV không khớp với cấu trúc bảng, bạn sẽ thấy lỗi ngay lúc tải lên. Nhưng kể cả không có lỗi, cũng chưa chắc dữ liệu đã hoàn hảo đâu nha.

  1. Kiểm tra kiểu dữ liệu

Dùng các hàm của PostgreSQL để kiểm tra nội dung các cột. Ví dụ:

Kiểm tra giá trị rỗng (NULL):

Nếu bảng của bạn có các trường bắt buộc NOT NULL, bạn cần chắc chắn là chúng thực sự đã được điền. Ví dụ:

SELECT * FROM students WHERE first_name IS NULL OR last_name IS NULL;

Kiểm tra định dạng dữ liệu:

Đôi khi dữ liệu được tải lên dưới dạng chuỗi, trong khi lẽ ra phải là ngày hoặc số. Để kiểm tra, dùng các hàm phù hợp của PostgreSQL, ví dụ:

SELECT * FROM students WHERE birth_date::DATE IS NULL;

Query này sẽ trả về các dòng mà trường birth_date không thể chuyển sang kiểu DATE.

Kiểm tra lỗi dữ liệu

  1. Tìm bản ghi trùng lặp

Bản ghi trùng là một trong những vấn đề phổ biến nhất. Giả sử dữ liệu của bạn phải unique theo địa chỉ email (email). Để kiểm tra trùng lặp, dùng query sau:

SELECT email, COUNT(*)
FROM students
GROUP BY email
HAVING COUNT(*) > 1;

Query này sẽ cho bạn thấy tất cả email bị lặp, kèm số lần xuất hiện. Nếu cột email của bạn được set là UNIQUE, tải dữ liệu kiểu này sẽ báo lỗi ngay.

  1. Kiểm tra dữ liệu không hợp lệ

Nếu bạn mong đợi trường birth_date chỉ chứa ngày sinh, bạn cần chắc là mọi giá trị đều nằm trong khoảng hợp lý. Ví dụ:

SELECT * FROM students
WHERE birth_date < '1900-01-01' OR birth_date > CURRENT_DATE;

Query này sẽ trả về các dòng mà ngày sinh quá xa thực tế.

Xử lý dữ liệu không hợp lệ

Sau khi tìm ra vấn đề, bạn cần sửa chúng. Cùng xem cách làm nhé.

  1. Xoá dữ liệu không hợp lệ

Nếu phát hiện trong bảng có dòng tên bị rỗng, bạn có thể xoá chúng:

DELETE FROM students
WHERE first_name IS NULL OR last_name IS NULL;

Nhưng nhớ xoá cẩn thận nha! Vì có thể dữ liệu đó quan trọng, nên thay vì xoá, có khi bạn nên cập nhật lại thì hơn.

  1. Cập nhật dữ liệu

Nếu bạn tìm thấy dòng thiếu dữ liệu, có thể cập nhật dựa trên nguồn khác hoặc đoán. Ví dụ:

UPDATE students
SET email = 'unknown@example.com'
WHERE email IS NULL;

Trực quan hóa dữ liệu để phân tích

  1. Dùng hàm tổng hợp

Đôi khi để kiểm tra dữ liệu, bạn nên đếm tổng hợp. Ví dụ, để biết có bao nhiêu sinh viên sinh mỗi năm, chạy:

SELECT EXTRACT(YEAR FROM birth_date) AS year, COUNT(*)
FROM students
GROUP BY year
ORDER BY year;

Query này sẽ cho bạn thấy phân bố theo năm và có thể phát hiện bất thường (ví dụ, năm nào đó tự nhiên có quá nhiều sinh viên).

  1. Kiểm tra dữ liệu bằng constraint

Đảm bảo dữ liệu tuân thủ các constraint đã đặt trong bảng, ví dụ như sau:

Kiểm tra tính unique:

SELECT DISTINCT email
FROM students;

Nếu số lượng giá trị unique ít hơn tổng số dòng — bạn có trùng lặp rồi đó.

Kiểm tra giới hạn độ dài:

SELECT * FROM students
WHERE LENGTH(first_name) > 50 OR LENGTH(last_name) > 50;

Cái này giúp bạn chắc chắn tên sinh viên không vượt quá 50 ký tự.

Làm gì khi dữ liệu quá tệ?

Đôi khi dữ liệu tệ đến mức tốt nhất là tải lại từ đầu.

  1. Xoá hết các dòng trong bảng:

    TRUNCATE TABLE students;
    
  2. Sửa file CSV gốc bằng Python, Excel hoặc bất kỳ tool nào bạn thích.

  3. Tải lại dữ liệu bằng lệnh COPY.

Ứng dụng thực tế

Kỹ năng kiểm tra dữ liệu sẽ cực kỳ hữu ích mỗi khi bạn làm việc với nguồn ngoài. Khi phỏng vấn, người ta hoàn toàn có thể yêu cầu bạn viết SQL để kiểm tra chất lượng dữ liệu đầu vào — chuyện thường thôi. Trong dự án thực tế cũng vậy: dữ liệu từ khách hàng hoặc phòng ban khác gần như luôn có lỗi, và chính bạn sẽ là người phát hiện đầu tiên, sửa trước khi thành bug.

Kiểm tra dữ liệu thường xuyên giúp database luôn gọn gàng — không chỉ là hình thức mà còn tiết kiệm thời gian, công sức cho cả team. Nên nếu bạn biết cách kiểm tra dữ liệu nhanh, coi như đã tiến gần hơn đến danh hiệu master PostgreSQL rồi đó!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION