Завантаження даних із зовнішніх джерел — це як запросити напарників на справу. Ти хочеш впевнитися, що всі прийшли з правильним настроєм — або, у нашому випадку, у потрібному форматі. Навіть маленька помилка у файлі може призвести до годин дебагу, некоректних результатів запитів або просто зіпсувати дані в таблиці.
Іноді у файл можуть затесатися порожні рядки, зайві пробіли, дублікати або, наприклад, текст там, де має бути цифра. А якщо ще й кодування не те, таблиця може просто відмовитись приймати файл.
Щоб такого не сталося, важливо навчитися заздалегідь перевіряти дані на коректність — ще до завантаження або одразу після нього. Зараз розберемо, як це робити.
Перевірка структури даних
- Порівняння структури таблиці із завантаженими даними
Перший крок — впевнитися, що дані завантажені відповідно до структури твоєї таблиці. Наприклад, ти створював таблицю students для зберігання інформації про студентів:
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
);
Якщо ти завантажив дані у цю таблицю, для початку просто подивись, що там знаходиться:
SELECT * FROM students;
Повернуті рядки покажуть усі записи у таблиці. Якщо структура даних у CSV-файлі не відповідає структурі таблиці, ти побачиш помилки ще на етапі завантаження. Але навіть якщо помилок не було, це не означає, що дані завантажені ідеально.
- Перевірка типів даних
Використовуй функції PostgreSQL для перевірки вмісту колонок. Наприклад:
Перевірка порожніх значень (NULL):
Якщо у твоїй таблиці є обов'язкові поля NOT NULL, треба впевнитися, що вони дійсно заповнені. Наприклад:
SELECT * FROM students WHERE first_name IS NULL OR last_name IS NULL;
Перевірка форматів даних:
Іноді дані можуть бути завантажені як рядки, хоча мають бути датами або числами. Щоб це перевірити, використовуй відповідні функції PostgreSQL, наприклад:
SELECT * FROM students WHERE birth_date::DATE IS NULL;
Цей запит покаже рядки, де поле birth_date не можна привести до типу DATE.
Перевірка на наявність помилок
- Пошук дублікатів
Дублікати — одна з найпоширеніших проблем. Припустимо, твої дані мають бути унікальні за email (email). Щоб перевірити наявність дублікатів, використовуй такий запит:
SELECT email, COUNT(*)
FROM students
GROUP BY email
HAVING COUNT(*) > 1;
Цей запит покаже всі повторювані email, а також кількість їх входжень. Якщо твоя колонка email налаштована як UNIQUE, то завантаження таких даних викличе помилку.
- Перевірка некоректних даних
Якщо ти очікуєш, що поле birth_date містить лише дати народження, треба впевнитися, що всі значення у допустимому діапазоні. Наприклад:
SELECT * FROM students
WHERE birth_date < '1900-01-01' OR birth_date > CURRENT_DATE;
Цей запит покаже рядки, де дата народження занадто далека від реальності.
Робота з некоректними даними
Після того, як ти знайшов проблеми, їх треба виправити. Давай розберемо, як це зробити.
- Видалення некоректних даних
Якщо виявилося, що у таблиці є рядки з порожніми іменами, ти можеш їх видалити:
DELETE FROM students
WHERE first_name IS NULL OR last_name IS NULL;
Але видаляти дані треба обережно! Вони можуть бути важливі, можливо, краще їх оновити, а не видаляти.
- Оновлення даних
Якщо ти знайшов рядки з відсутніми даними, їх можна оновити на основі інших джерел або припущень. Наприклад:
UPDATE students
SET email = 'unknown@example.com'
WHERE email IS NULL;
Візуалізація даних для аналізу
- Використання агрегатних функцій
Іноді для перевірки даних корисно порахувати агрегати. Наприклад, щоб дізнатися, скільки студентів народилося у кожному році, виконай:
SELECT EXTRACT(YEAR FROM birth_date) AS year, COUNT(*)
FROM students
GROUP BY year
ORDER BY year;
Цей запит покаже розподіл по роках і може вказати на аномалії (наприклад, якщо в одному році з'явилася підозріло велика група студентів).
- Перевірка даних за допомогою обмежень
Переконайся, що дані відповідають обмеженням, заданим у таблиці, наприклад, так:
Перевірка на унікальність:
SELECT DISTINCT email
FROM students;
Якщо кількість унікальних значень менша, ніж загальна кількість рядків — у тебе є дублікати.
Перевірка діапазонів значень:
SELECT * FROM students
WHERE LENGTH(first_name) > 50 OR LENGTH(last_name) > 50;
Це допоможе впевнитися, що імена студентів не перевищують ліміт у 50 символів.
Що робити, якщо все погано?
Іноді дані настільки погані, що їх простіше завантажити заново.
Видали всі рядки з таблиці:
TRUNCATE TABLE students;Виправ початковий CSV-файл за допомогою Python, Excel або будь-якого іншого інструменту.
- Завантаж дані заново за допомогою команди
COPY.
Практичне застосування
Навички валідації даних знадобляться тобі кожного разу, коли працюєш із зовнішніми джерелами. На співбесідах, наприклад, тебе цілком можуть попросити скласти SQL-запит для перевірки якості вхідних даних — це звичайна практика. У реальних проектах ситуація не простіша: дані від клієнта чи іншого відділу майже завжди приходять з помилками, і саме ти станеш тим, хто помітить їх першим і зможе все виправити до того, як дійде до багів.
Регулярна перевірка даних допомагає тримати базу у порядку — і це не просто формальність, а реальна економія часу, нервів і зусиль всієї команди. Тож якщо ти вмієш швидко зрозуміти, чи все ок із даними, — вважай, ти на крок ближче до звання майстра PostgreSQL.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ