CodeGym /Kurse /SQL SELF /Vorbereitung von Tabellen für das Laden von Daten aus CSV...

Vorbereitung von Tabellen für das Laden von Daten aus CSV

SQL SELF
Level 23 , Lektion 2
Verfügbar

Lass uns endlich damit anfangen, Tabellen für das Massenladen von Daten aus CSV-Dateien vorzubereiten. Falls du denkst: "Warum muss ich überhaupt eine Tabelle vorbereiten? Was soll daran schwer sein?", dann hast du noch einiges über die echte Welt zu lernen. Keine Datei ist je "perfekt". Irgendwas ist immer – seien es Duplikate, überflüssige Leerzeichen, Fehler bei Datentypen oder einfach eine nicht passende Struktur.

Schauen wir uns an, wie man die Datenbank richtig vorbereitet, damit die CSV-Datei ohne Drama geladen wird.

Bevor du eine CSV-Datei lädst, überlege dir, wie genau die Daten in der Datenbank gespeichert werden sollen. Das heißt, du musst zuerst eine Tabelle mit der passenden Struktur anlegen.

Beispiel: Laden von Studentendaten

Nehmen wir an, wir haben eine CSV-Datei students.csv mit Infos über Studierende. Der Inhalt sieht so aus:

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

Darauf basierend erstellen wir eine Tabelle:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,       -- Einzigartige Kennung des Studenten
    name VARCHAR(100) NOT NULL,  -- Name des Studenten (String bis 100 Zeichen)
    age INT CHECK (age > 0),     -- Alter des Studenten (muss größer als 0 sein)
    email VARCHAR(100) UNIQUE,   -- Einzigartige Email
    major VARCHAR(100)           -- Hauptfach
);
  • id SERIAL PRIMARY KEY: Wir haben einen Primary Key hinzugefügt, um Zeilen eindeutig zu identifizieren. Falls deine CSV-Datei schon eindeutige IDs hat, nutze die Spalte id aus der Datei.
  • name VARCHAR(100) NOT NULL: Der Name des Studenten muss angegeben werden und ist auf 100 Zeichen begrenzt.
  • age INT CHECK (age > 0): Das Alter muss eine Zahl sein, und wir prüfen, dass es immer größer als 0 ist.
  • email VARCHAR(100) UNIQUE: Die Email muss eindeutig sein, damit es keine doppelten Einträge gibt.
  • major VARCHAR(100): Gibt das Hauptfach des Studenten an. Hier gibt es keine Einschränkungen.

Deine Tabellen sollten durchdacht strukturiert sein, damit sie zu deinen Daten passen und gleichzeitig vor fehlerhaften Daten schützen. Das reduziert Fehler beim Laden.

Daten vor dem Laden prüfen

CSV-Dateien haben oft Überraschungen parat. Bevor du Daten lädst, check, ob sie zur Tabellenstruktur passen.

Wie prüft man die Daten?

  1. Spaltenanzahl
    Stell sicher, dass die Anzahl der Spalten in der CSV mit der Anzahl der Spalten in der Tabelle übereinstimmt. Wenn die Tabelle 5 Spalten hat, die CSV aber 6, gibt's einen Fehler beim Laden.

  2. Datentypen
    Prüfe, ob die Daten in jeder Spalte den erwarteten Typen entsprechen. Zum Beispiel sollten in der Spalte age nur ganze Zahlen stehen.

Tools zur Validierung

Excel oder Google Sheets. Öffne die Datei in einem Tabelleneditor und schau, ob es leere Zeilen oder Zellen mit falschen Daten gibt.

Python. Nutze das pandas-Package, um Datentypen zu prüfen:

import pandas as pd

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

# Daten prüfen
print(df.dtypes)  # Gibt die Datentypen für jede Spalte aus
print(df.isnull().sum())  # Prüft auf leere Werte

Datenbereinigung vor dem Laden

Meistens müssen Daten aus externen Quellen bereinigt werden. Sonst läufst du Gefahr, beim Laden Fehler zu bekommen.

Typische Probleme mit CSV-Dateien

Leere Zeilen oder Spalten
Wenn in einer Zeile ein Wert in einer Pflichtspalte (NOT NULL) fehlt, gibt's einen Fehler.

Beispiel für fehlerhafte Daten:

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

Lösung: Ersetze leere Werte durch zulässige. Zum Beispiel ersetze ein leeres age durch NULL.

Überflüssige Leerzeichen
Leerzeichen am Anfang oder Ende von Strings können Probleme machen. Zum Beispiel werden "Alex" und "Alex" als unterschiedliche Werte behandelt.

Lösung in Python: Entferne überflüssige Leerzeichen.

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

Falsche Zeichen oder Encoding
Wenn die Datei Sonderzeichen enthält, die nicht mit der Datenbank kompatibel sind, kann das Laden fehlschlagen.

Beispiel: Nutze das Tool iconv, um das Encoding zu ändern:

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

Datenbereinigung: Beispiel mit Python

import pandas as pd

# Datei lesen
df = pd.read_csv('students.csv')

# Daten bereinigen
df['name'] = df['name'].str.strip()  # Leerzeichen entfernen
df['email'] = df['email'].str.lower()  # Email in Kleinbuchstaben umwandeln
df['age'] = df['age'].fillna(0)  # Fehlende Werte für Alter auffüllen
df['age'] = df['age'].astype(int)  # Alter in Integer umwandeln

# Änderungen in neue Datei speichern
df.to_csv('cleaned_students.csv', index=False)

Check deine Daten immer vor dem Laden. Denk dran: Ein guter Coder spart sich Zeit, indem er Probleme früh erkennt!

Nützliche Checkliste zur Vorbereitung von Tabellen und Daten

Bevor du mit CSV loslegst, prüfe:

  • Die Tabellenstruktur passt zu den Daten (Spalten, Datentypen, Constraints).
  • Die CSV-Datei enthält keine leeren Zeilen, überflüssigen Leerzeichen oder falsche Zeichen.
  • Das Encoding der Datei ist mit PostgreSQL kompatibel (am besten UTF-8).
  • Du nutzt Tools zur Analyse und Bereinigung der Daten (z.B. Python, Excel).

Jetzt bist du bereit, Daten aus CSV zu laden! Aber bevor wir das machen, stell sicher, dass deine Tabelle richtig strukturiert ist und die Daten sauber sind. In der nächsten Vorlesung schauen wir uns an, wie man Daten in PostgreSQL lädt, Fehler behandelt und mit Konflikten umgeht.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION