JavaRush /Курси /SQL SELF /Підготовка таблиць для завантаження даних з CSV

Підготовка таблиць для завантаження даних з CSV

SQL SELF
Рівень 23 , Лекція 2
Відкрита

Давай вже нарешті займемось підготовкою таблиць для масового завантаження даних з 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-файли часто містять сюрпризи. Перед тим як завантажувати дані, переконайся, що вони відповідають структурі таблиці.

Як перевірити дані?

  1. Відповідність стовпців
    Переконайся, що кількість стовпців у CSV збігається з кількістю стовпців у таблиці. Наприклад, якщо в таблиці 5 стовпців, а в CSV-файлі їх 6, завантаження завершиться помилкою.

  2. Типи даних
    Перевір, щоб дані в кожному стовпці відповідали очікуваним типам. Наприклад, у стовпці 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, включаючи обробку помилок і роботу з конфліктами.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ