Давай вже нарешті займемось підготовкою таблиць для масового завантаження даних з CSV-файлів. Якщо ти думаєш: "А навіщо взагалі треба готувати таблицю? Що там складного?", то тобі ще багато чого треба дізнатись про реальний світ. Жоден файл не буває "ідеальним". Ложка дьогтю завжди знайдеться — чи то дублікати, зайві пробіли, помилки в типах даних або просто невідповідність структури.
Давай розберемо, як правильно підготувати базу, щоб CSV-файл завантажився без ексцесів.
Перед тим як завантажувати CSV-файл, визнач, як саме дані будуть зберігатися в базі. Це означає, що спочатку треба створити таблицю з відповідною структурою.
Приклад: завантаження даних про студентів
Припустимо, у нас є CSV-файл students.csv з інформацією про студентів. Його вміст виглядає так:
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
На його основі створимо таблицю:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- Унікальний ідентифікатор студента
name VARCHAR(100) NOT NULL, -- Ім'я студента (рядок довжиною до 100 символів)
age INT CHECK (age > 0), -- Вік студента (має бути більше 0)
email VARCHAR(100) UNIQUE, -- Унікальний email
major VARCHAR(100) -- Основна спеціальність
);
id SERIAL PRIMARY KEY: Ми додали основний ключ для унікальної ідентифікації рядків. Якщо у твоєму CSV-файлі вже є унікальні ідентифікатори, використовуй стовпецьidз файлу.name VARCHAR(100) NOT NULL: Ім'я студента має бути вказане, і довжина імені обмежена 100 символами.age INT CHECK (age > 0): Вік має бути числом, і ми додаємо перевірку, щоб він завжди був більше 0.email VARCHAR(100) UNIQUE: Email має бути унікальним, щоб уникнути дублюючих записів.major VARCHAR(100): Вказує на основну спеціальність студента. В даному випадку обмежень немає.
Твої таблиці мають бути продумано структуровані, щоб відповідати твоїм даним і одночасно захищати від некоректних даних. Це зменшить кількість помилок при завантаженні.
Перевірка даних перед завантаженням
CSV-файли часто містять сюрпризи. Перед тим як завантажувати дані, переконайся, що вони відповідають структурі таблиці.
Як перевірити дані?
Відповідність стовпців
Переконайся, що кількість стовпців у CSV збігається з кількістю стовпців у таблиці. Наприклад, якщо в таблиці 5 стовпців, а в CSV-файлі їх 6, завантаження завершиться помилкою.Типи даних
Перевір, щоб дані в кожному стовпці відповідали очікуваним типам. Наприклад, у стовпціageмають бути тільки цілі числа.
Інструменти для валідації
Excel або Google Sheets. Відкрий файл у табличному редакторі й переконайся, що у твоєму документі немає порожніх рядків або клітинок з некоректними даними.
Python. Використовуй бібліотеку pandas для перевірки типів даних:
import pandas as pd
# Читаємо CSV
df = pd.read_csv('students.csv')
# Перевіряємо дані
print(df.dtypes) # Вивід типів даних для кожного стовпця
print(df.isnull().sum()) # Перевірка порожніх значень
Очищення даних перед завантаженням
Найчастіше дані з зовнішніх джерел потребують очищення. Інакше ти ризикуєш зіткнутись з помилками при завантаженні.
Типові проблеми з CSV-файлами
Порожні рядки або стовпці
Якщо у рядку пропущене значення в обов'язковому стовпці (NOT NULL), це викличе помилку.
Приклад некоректних даних:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
Рішення: Замініть порожні значення на допустимі. Наприклад, заміни порожній age на NULL.
Зайві пробіли
Пробіли на початку або в кінці рядків можуть викликати проблеми. Наприклад, "Alex" і "Alex" будуть вважатися різними значеннями.
Рішення на Python: видали зайві пробіли.
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Некоректні символи або кодування
Якщо файл містить спеціальні символи, несумісні з базою даних, завантаження може завершитись невдачею.
Приклад: Використовуй додаток iconv для перетворення кодування:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
Очищення даних: приклад з Python
import pandas as pd
# Читаємо файл
df = pd.read_csv('students.csv')
# Очищаємо дані
df['name'] = df['name'].str.strip() # Видаляємо пробіли
df['email'] = df['email'].str.lower() # Приводимо email до нижнього регістру
df['age'] = df['age'].fillna(0) # Заповнюємо порожні значення для віку
df['age'] = df['age'].astype(int) # Конвертуємо вік у ціле число
# Зберігаємо зміни у новий файл
df.to_csv('cleaned_students.csv', index=False)
Завжди перевіряй дані перед завантаженням. Пам'ятай: хороший програміст економить свій час, ловлячи проблеми заздалегідь!
Корисний чек-ліст для підготовки таблиць і даних
Перед початком роботи з CSV перевір:
- Структура таблиці відповідає даним (стовпці, типи даних, обмеження).
- CSV-файл не містить порожніх рядків, зайвих пробілів або некоректних символів.
- Кодування файлу сумісне з PostgreSQL (краще за все використовувати UTF-8).
- Ти використовуєш інструменти для аналізу та очищення даних (наприклад, Python, Excel).
Тепер ти готовий завантажувати дані з CSV! Але перед тим як це зробити, переконайся, що твоя таблиця правильно структурована і дані очищені. На наступній лекції ми продовжимо розбирати процес завантаження даних у PostgreSQL, включаючи обробку помилок і роботу з конфліктами.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ