Die richtige Partitionierungsstrategie beeinflusst die Abfrageleistung dramatisch. Zeitbasiertes Partitioning für Zeitreihen, Hash für gleichmäßige Verteilung und Range für sequenzielle Daten.
Warum Partitioning¶
Ohne Partitioning scannt die Engine die gesamte Tabelle. Partitioning ermöglicht das Überspringen unnötiger Daten (Partition Pruning).
Partitioning-Typen¶
- Zeitbasiert — am häufigsten, Partitioning nach Datum (Tag, Monat)
- Hash — gleichmäßige Verteilung nach Hash-Schlüssel
- Range — Wertebereiche (A-M, N-Z)
- List — explizite Werteliste (Regionen, Kategorien)
# Daten-Partitionierungsstrategien für optimale Abfrageleistung
df.write.format("delta") \
.partitionBy("year", "month") \
.save("/data/orders")
# Abfrage mit Partition Pruning
spark.read.format("delta").load("/data/orders") \
.filter("year = 2026 AND month = 2") # liest nur 1 Partition
Best Practices¶
- 1 GB+ pro Partition — zu kleine Partitionen sind kontraproduktiv
- Max 10k Partitionen — zu viele = langsamer Metadata-Scan
- Partitioning nach Filtern — nach den häufigsten WHERE-Bedingungen
Zusammenfassung¶
Richtiges Partitioning ist entscheidend für die Leistung. Wählen Sie nach den häufigsten Filtern und halten Sie Partitionen ausreichend groß.