CodeGym /Kursy /SQL SELF /Przygotowanie tabel do ładowania danych z CSV

Przygotowanie tabel do ładowania danych z CSV

SQL SELF
Poziom 23, Lekcja 2
Dostępny

No to w końcu zabierzmy się za przygotowanie tabel do masowego ładowania danych z plików CSV. Jeśli myślisz: "Po co w ogóle przygotowywać tabelę? Co w tym trudnego?", to jeszcze sporo musisz się dowiedzieć o prawdziwym świecie. Żaden plik nie jest "idealny". Zawsze znajdzie się jakaś łyżka dziegciu — czy to duplikaty, zbędne spacje, błędy w typach danych albo po prostu niezgodność struktury.

Rozkminmy, jak dobrze przygotować bazę, żeby plik CSV załadował się bez przypałów.

Zanim wrzucisz plik CSV, zdecyduj, jak dokładnie dane będą trzymane w bazie. To znaczy, że najpierw trzeba stworzyć tabelę z odpowiednią strukturą.

Przykład: ładowanie danych o studentach

Załóżmy, że mamy plik CSV students.csv z info o studentach. Jego zawartość wygląda tak:

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

Na tej podstawie tworzymy tabelę:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,       -- Unikalny identyfikator studenta
    name VARCHAR(100) NOT NULL,  -- Imię studenta (string do 100 znaków)
    age INT CHECK (age > 0),     -- Wiek studenta (musi być większy od 0)
    email VARCHAR(100) UNIQUE,   -- Unikalny email
    major VARCHAR(100)           -- Główny kierunek
);
  • id SERIAL PRIMARY KEY: Dodaliśmy klucz główny do unikalnej identyfikacji wierszy. Jeśli w twoim pliku CSV już są unikalne identyfikatory, użyj kolumny id z pliku.
  • name VARCHAR(100) NOT NULL: Imię studenta musi być podane, a długość ograniczona do 100 znaków.
  • age INT CHECK (age > 0): Wiek musi być liczbą i dodajemy sprawdzenie, żeby zawsze był większy od 0.
  • email VARCHAR(100) UNIQUE: Email musi być unikalny, żeby nie było duplikatów.
  • major VARCHAR(100): Wskazuje główny kierunek studenta. Tu nie ma ograniczeń.

Twoje tabele powinny być sensownie zaprojektowane, żeby pasowały do danych i jednocześnie chroniły przed błędnymi danymi. To zmniejszy liczbę błędów przy ładowaniu.

Sprawdzanie danych przed ładowaniem

Pliki CSV często kryją niespodzianki. Zanim wrzucisz dane, upewnij się, że pasują do struktury tabeli.

Jak sprawdzić dane?

  1. Zgodność kolumn
    Upewnij się, że liczba kolumn w CSV zgadza się z liczbą kolumn w tabeli. Na przykład, jeśli w tabeli jest 5 kolumn, a w pliku CSV 6, ładowanie skończy się błędem.

  2. Typy danych
    Sprawdź, czy dane w każdej kolumnie pasują do oczekiwanych typów. Na przykład, w kolumnie age powinny być tylko liczby całkowite.

Narzędzia do walidacji

Excel albo Google Sheets. Otwórz plik w edytorze arkuszy i sprawdź, czy nie ma pustych wierszy albo komórek z błędnymi danymi.

Python. Użyj biblioteki pandas do sprawdzenia typów danych:

import pandas as pd

# Czytamy CSV
df = pd.read_csv('students.csv')

# Sprawdzamy dane
print(df.dtypes)  # Wypisuje typy danych dla każdej kolumny
print(df.isnull().sum())  # Sprawdza puste wartości

Czyszczenie danych przed ładowaniem

Najczęściej dane z zewnętrznych źródeł wymagają czyszczenia. Inaczej możesz natknąć się na błędy przy ładowaniu.

Typowe problemy z plikami CSV

Puste wiersze lub kolumny
Jeśli w wierszu brakuje wartości w obowiązkowej kolumnie (NOT NULL), to wywali błąd.

Przykład błędnych danych:

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

Rozwiązanie: Zamień puste wartości na dozwolone. Na przykład, pusty age zamień na NULL.

Zbędne spacje
Spacje na początku lub końcu stringów mogą robić problemy. Na przykład, "Alex" i "Alex" będą traktowane jako różne wartości.

Rozwiązanie w Pythonie: usuń zbędne spacje.

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

Błędne znaki lub kodowanie
Jeśli plik zawiera specjalne znaki niekompatybilne z bazą, ładowanie może się nie udać.

Przykład: Użyj narzędzia iconv do konwersji kodowania:

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

Czyszczenie danych: przykład z Pythonem

import pandas as pd

# Czytamy plik
df = pd.read_csv('students.csv')

# Czyścimy dane
df['name'] = df['name'].str.strip()  # Usuwamy spacje
df['email'] = df['email'].str.lower()  # Email na małe litery
df['age'] = df['age'].fillna(0)  # Uzupełniamy puste wartości wieku
df['age'] = df['age'].astype(int)  # Konwertujemy wiek na int

# Zapisujemy zmiany do nowego pliku
df.to_csv('cleaned_students.csv', index=False)

Zawsze sprawdzaj dane przed ładowaniem. Pamiętaj: dobry programista oszczędza sobie czas, wyłapując problemy wcześniej!

Przydatna checklista do przygotowania tabel i danych

Zanim zaczniesz pracę z CSV, sprawdź:

  • Struktura tabeli pasuje do danych (kolumny, typy danych, ograniczenia).
  • Plik CSV nie ma pustych wierszy, zbędnych spacji ani błędnych znaków.
  • Kodowanie pliku jest kompatybilne z PostgreSQL (najlepiej używać UTF-8).
  • Korzystasz z narzędzi do analizy i czyszczenia danych (np. Python, Excel).

Teraz jesteś gotowy na ładowanie danych z CSV! Ale zanim to zrobimy, upewnij się, że twoja tabela jest dobrze zbudowana i dane są wyczyszczone. W następnej lekcji będziemy dalej ogarniać proces ładowania danych do PostgreSQL, w tym obsługę błędów i konflikty.

2
Zadanie
SQL SELF, poziom 23, lekcja 2
Niedostępne
Tworzenie tabeli do ładowania danych
Tworzenie tabeli do ładowania danych
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION