CodeGym /Các khóa học /SQL SELF /Chuẩn bị bảng để import dữ liệu từ CSV

Chuẩn bị bảng để import dữ liệu từ CSV

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

Giờ thì tụi mình cùng bắt tay vào chuẩn bị bảng cho việc import dữ liệu hàng loạt từ file CSV nhé. Nếu bạn nghĩ: "Ủa, sao phải chuẩn bị bảng? Có gì khó đâu?", thì bạn còn nhiều thứ phải khám phá về thế giới thực lắm. Không có file nào là "hoàn hảo" cả. Luôn có cái gì đó không ổn — như là dữ liệu trùng, khoảng trắng thừa, lỗi kiểu dữ liệu hoặc đơn giản là cấu trúc không khớp.

Giờ mình sẽ chỉ bạn cách chuẩn bị database cho chuẩn để file CSV import vào không bị lỗi lặt vặt.

Trước khi import file CSV, bạn cần xác định dữ liệu sẽ được lưu trong database như thế nào. Nghĩa là trước tiên phải tạo bảng với cấu trúc phù hợp.

Ví dụ: import dữ liệu sinh viên

Giả sử tụi mình có file CSV students.csv chứa thông tin sinh viên. Nội dung nó như này:

id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics

Dựa vào đó, mình tạo bảng như sau:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,       -- Định danh duy nhất cho sinh viên
    name VARCHAR(100) NOT NULL,  -- Tên sinh viên (chuỗi tối đa 100 ký tự)
    age INT CHECK (age > 0),     -- Tuổi sinh viên (phải lớn hơn 0)
    email VARCHAR(100) UNIQUE,   -- Email duy nhất
    major VARCHAR(100)           -- Chuyên ngành chính
);
  • id SERIAL PRIMARY KEY: Thêm khóa chính để định danh từng dòng. Nếu file CSV của bạn đã có id duy nhất, dùng luôn cột id từ file.
  • name VARCHAR(100) NOT NULL: Tên sinh viên bắt buộc phải có, tối đa 100 ký tự.
  • age INT CHECK (age > 0): Tuổi phải là số nguyên, và luôn lớn hơn 0.
  • email VARCHAR(100) UNIQUE: Email phải duy nhất, tránh trùng lặp.
  • major VARCHAR(100): Chuyên ngành chính của sinh viên. Ở đây không giới hạn gì.

Bảng của bạn nên được thiết kế kỹ càng để vừa khớp dữ liệu vừa bảo vệ khỏi dữ liệu sai. Như vậy sẽ giảm lỗi khi import.

Kiểm tra dữ liệu trước khi import

File CSV thường có nhiều bất ngờ lắm. Trước khi import, hãy chắc chắn dữ liệu khớp với cấu trúc bảng.

Làm sao kiểm tra dữ liệu?

  1. Khớp số lượng cột
    Đảm bảo số cột trong CSV bằng số cột trong bảng. Ví dụ, bảng có 5 cột mà file CSV có 6 cột là import lỗi liền.

  2. Kiểu dữ liệu
    Kiểm tra dữ liệu từng cột đúng kiểu chưa. Ví dụ, cột age chỉ được chứa số nguyên thôi.

Công cụ kiểm tra dữ liệu

Excel hoặc Google Sheets. Mở file bằng phần mềm bảng tính và kiểm tra xem có dòng trống hoặc ô nào sai dữ liệu không.

Python. Dùng thư viện pandas để kiểm tra kiểu dữ liệu:

import pandas as pd

# Đọc file CSV
df = pd.read_csv('students.csv')

# Kiểm tra dữ liệu
print(df.dtypes)  # In ra kiểu dữ liệu từng cột
print(df.isnull().sum())  # Kiểm tra số giá trị trống

Làm sạch dữ liệu trước khi import

Dữ liệu từ nguồn ngoài thường phải làm sạch. Không thì dễ gặp lỗi khi import lắm.

Những vấn đề thường gặp với file CSV

Dòng hoặc cột trống
Nếu dòng nào thiếu giá trị ở cột bắt buộc (NOT NULL) là lỗi ngay.

Ví dụ dữ liệu sai:

id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics

Cách xử lý: Thay giá trị trống bằng giá trị hợp lệ. Ví dụ, cột age trống thì thay bằng NULL.

Khoảng trắng thừa
Khoảng trắng ở đầu/cuối chuỗi gây lỗi. Ví dụ, "Alex""Alex" bị coi là khác nhau.

Giải pháp với Python: xóa khoảng trắng thừa.

df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

Ký tự lạ hoặc lỗi mã hóa
Nếu file có ký tự đặc biệt không tương thích với database thì import sẽ fail.

Ví dụ: Dùng app iconv để chuyển mã hóa:

iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv

Làm sạch dữ liệu: ví dụ với Python

import pandas as pd

# Đọc file
df = pd.read_csv('students.csv')

# Làm sạch dữ liệu
df['name'] = df['name'].str.strip()  # Xóa khoảng trắng
df['email'] = df['email'].str.lower()  # Đưa email về chữ thường
df['age'] = df['age'].fillna(0)  # Điền giá trị 0 cho tuổi bị trống
df['age'] = df['age'].astype(int)  # Chuyển tuổi thành số nguyên

# Lưu file mới
df.to_csv('cleaned_students.csv', index=False)

Luôn kiểm tra dữ liệu trước khi import nhé. Nhớ: coder giỏi là người tiết kiệm thời gian bằng cách bắt lỗi sớm!

Checklist hữu ích để chuẩn bị bảng và dữ liệu

Trước khi làm việc với CSV, hãy kiểm tra:

  • Cấu trúc bảng khớp với dữ liệu (cột, kiểu dữ liệu, ràng buộc).
  • File CSV không có dòng trống, khoảng trắng thừa hay ký tự lạ.
  • Mã hóa file tương thích với PostgreSQL (tốt nhất là UTF-8).
  • Bạn dùng công cụ để phân tích và làm sạch dữ liệu (ví dụ Python, Excel).

Giờ thì bạn đã sẵn sàng import dữ liệu từ CSV rồi đó! Nhưng trước khi làm, nhớ kiểm tra bảng đã chuẩn chưa và dữ liệu đã sạch chưa nhé. Ở bài sau tụi mình sẽ tiếp tục tìm hiểu quá trình import vào PostgreSQL, bao gồm xử lý lỗi và giải quyết xung đột.

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