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 Spalteidaus 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?
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.Datentypen
Prüfe, ob die Daten in jeder Spalte den erwarteten Typen entsprechen. Zum Beispiel sollten in der Spalteagenur 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.
GO TO FULL VERSION