JavaRush /Курси /SQL SELF /Перевірка коректності завантажених даних

Перевірка коректності завантажених даних

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

Завантаження даних із зовнішніх джерел — це як запросити напарників на справу. Ти хочеш впевнитися, що всі прийшли з правильним настроєм — або, у нашому випадку, у потрібному форматі. Навіть маленька помилка у файлі може призвести до годин дебагу, некоректних результатів запитів або просто зіпсувати дані в таблиці.

Іноді у файл можуть затесатися порожні рядки, зайві пробіли, дублікати або, наприклад, текст там, де має бути цифра. А якщо ще й кодування не те, таблиця може просто відмовитись приймати файл.

Щоб такого не сталося, важливо навчитися заздалегідь перевіряти дані на коректність — ще до завантаження або одразу після нього. Зараз розберемо, як це робити.

Перевірка структури даних

  1. Порівняння структури таблиці із завантаженими даними

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

  1. Перевірка типів даних

Використовуй функції 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.

Перевірка на наявність помилок

  1. Пошук дублікатів

Дублікати — одна з найпоширеніших проблем. Припустимо, твої дані мають бути унікальні за email (email). Щоб перевірити наявність дублікатів, використовуй такий запит:

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

Цей запит покаже всі повторювані email, а також кількість їх входжень. Якщо твоя колонка email налаштована як UNIQUE, то завантаження таких даних викличе помилку.

  1. Перевірка некоректних даних

Якщо ти очікуєш, що поле birth_date містить лише дати народження, треба впевнитися, що всі значення у допустимому діапазоні. Наприклад:

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

Цей запит покаже рядки, де дата народження занадто далека від реальності.

Робота з некоректними даними

Після того, як ти знайшов проблеми, їх треба виправити. Давай розберемо, як це зробити.

  1. Видалення некоректних даних

Якщо виявилося, що у таблиці є рядки з порожніми іменами, ти можеш їх видалити:

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

Але видаляти дані треба обережно! Вони можуть бути важливі, можливо, краще їх оновити, а не видаляти.

  1. Оновлення даних

Якщо ти знайшов рядки з відсутніми даними, їх можна оновити на основі інших джерел або припущень. Наприклад:

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

Візуалізація даних для аналізу

  1. Використання агрегатних функцій

Іноді для перевірки даних корисно порахувати агрегати. Наприклад, щоб дізнатися, скільки студентів народилося у кожному році, виконай:

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

Цей запит покаже розподіл по роках і може вказати на аномалії (наприклад, якщо в одному році з'явилася підозріло велика група студентів).

  1. Перевірка даних за допомогою обмежень

Переконайся, що дані відповідають обмеженням, заданим у таблиці, наприклад, так:

Перевірка на унікальність:

SELECT DISTINCT email
FROM students;

Якщо кількість унікальних значень менша, ніж загальна кількість рядків — у тебе є дублікати.

Перевірка діапазонів значень:

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

Це допоможе впевнитися, що імена студентів не перевищують ліміт у 50 символів.

Що робити, якщо все погано?

Іноді дані настільки погані, що їх простіше завантажити заново.

  1. Видали всі рядки з таблиці:

    TRUNCATE TABLE students;
    
  2. Виправ початковий CSV-файл за допомогою Python, Excel або будь-якого іншого інструменту.

  3. Завантаж дані заново за допомогою команди COPY.

Практичне застосування

Навички валідації даних знадобляться тобі кожного разу, коли працюєш із зовнішніми джерелами. На співбесідах, наприклад, тебе цілком можуть попросити скласти SQL-запит для перевірки якості вхідних даних — це звичайна практика. У реальних проектах ситуація не простіша: дані від клієнта чи іншого відділу майже завжди приходять з помилками, і саме ти станеш тим, хто помітить їх першим і зможе все виправити до того, як дійде до багів.

Регулярна перевірка даних допомагає тримати базу у порядку — і це не просто формальність, а реальна економія часу, нервів і зусиль всієї команди. Тож якщо ти вмієш швидко зрозуміти, чи все ок із даними, — вважай, ти на крок ближче до звання майстра PostgreSQL.

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
-_- Рівень 34
31 січня 2026
Дана задача є поломаною, сподіваюсь адміністрація javarush побачить моє повідомлення та вирішить дану проблему. Бо нажаль задача ніяк не хоче вирішуватись даже з правильною відповіддю В умові зазначено, що поля є обов'язковими і не повинні містити NULL — якщо це дійсно вимога до схеми таблиці, потрібно додати NOT NULL для відповідних полів при створенні таблиці. Зараз таблиця дозволяє NULL для цих полів, тому вимога не виконана.