Správná strategie partitioningu dramaticky ovlivňuje výkon dotazů. Časové partitioning pro time-series, hash pro rovnoměrné rozložení a range pro sekvenční data.
Proč partitioning¶
Bez partitioningu engine skenuje celou tabulku. Partitioning umožňuje přeskočit nepotřebná data (partition pruning).
Typy partitioningu¶
- Časový — nejčastější, partitioning podle data (den, měsíc)
- Hash — rovnoměrné rozložení podle hash klíče
- Range — rozsahy hodnot (A-M, N-Z)
- List — explicitní seznam hodnot (regiony, kategorie)
# Spark: partitioning při zápisu
df.write.format("delta") \
.partitionBy("year", "month") \
.save("/data/orders")
# Dotaz s partition pruning
spark.read.format("delta").load("/data/orders") \
.filter("year = 2026 AND month = 2") # čte jen 1 partition
Best practices¶
- 1 GB+ na partition — příliš malé partitions jsou kontraproduktivní
- Max 10k partitions — příliš mnoho = pomalý metadata scan
- Partitioning podle filtrů — podle nejčastějších WHERE podmínek
Shrnutí¶
Správný partitioning je klíčový pro výkon. Volte podle nejčastějších filtrů a udržujte partitions dostatečně velké.
partitioningvýkondata lakeoptimalizace