Spark

Écrasement dynamique de partitions (backfill sûr)

Le mode dynamic ne remplace que les partitions présentes dans le DataFrame écrit, au lieu de purger toute la table — le réglage qui sauve les backfills.

Cas d'usage

Rejouer 3 jours de données sans toucher aux 2 ans d'historique de la table.

Prérequis

PySpark 3.x

Python
# STATIC (défaut) : mode overwrite + partitionBy supprime TOUTES les partitions
spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")

(
    df_fixed_days                      # contient uniquement les jours rejoués
    .write
    .mode("overwrite")
    .partitionBy("event_date")
    .parquet("s3a://lake/silver/events/")
)
# Seules les partitions event_date présentes dans df_fixed_days sont réécrites.

# Équivalent Delta sans config : replaceWhere explicite
# .option("replaceWhere", "event_date BETWEEN '2026-06-01' AND '2026-06-03'")

Résultat

>>> df_fixed_days.select("event_date").distinct().orderBy("event_date").show()
+----------+
|event_date|
+----------+
|2026-06-01|
|2026-06-02|
|2026-06-03|
+----------+

Partitions de la table : 730 avant / 730 apres
Seules event_date=2026-06-01..03 reecrites (mtime 08:14), historique intact.
PySparkpartitionByBackfillParquet

Snippets liés

Retour au Data Lab