Delta Lake ist ein Open-Source Storage Layer für einen zuverlässigen Data Lake. ACID-Transaktionen, Schema Enforcement und Time Travel über Parquet.
Warum Delta Lake¶
Löst inkonsistente Lesevorgänge und fehlendes Schema Enforcement durch ein Transaktionslog.
Wichtige Funktionen¶
- ACID-Transaktionen
- Schema Enforcement/Evolution
- Time Travel
- MERGE (Upsert)
from delta import DeltaTable
df.write.format("delta").save("/data/orders")
# Delta Lake — ACID-Transaktionen für Data Lake
spark.read.format("delta").option("versionAsOf", 5).load("/data/orders")
# MERGE
dt = DeltaTable.forPath(spark, "/data/orders")
dt.alias("t").merge(new.alias("s"), "t.order_id = s.order_id")\
.whenMatchedUpdateAll().whenNotMatchedInsertAll().execute()
OPTIMIZE delta.`/data/orders` ZORDER BY (customer_id)
VACUUM delta.`/data/orders` RETAIN 168 HOURS
Optimierung und Wartung¶
Der OPTIMIZE-Befehl komprimiert kleine Dateien zu groesseren, was das Lesen beschleunigt. ZORDER ordnet Daten nach angegebenen Spalten fuer effizienteres Data Skipping um — wenn Sie haeufig nach customer_id filtern, reduziert ZORDER auf dieser Spalte die gelesene Datenmenge erheblich. VACUUM loescht alte Dateiversionen, die fuer Time Travel nicht mehr benoetigt werden.
In der Praxis wird Delta Lake haeufig mit Apache Spark fuer Batch- und Streaming-Verarbeitung kombiniert. Unity Catalog (Databricks) oder HMS (Hive Metastore) dient als Metadatenkatalog. Delta Lake unterstuetzt Schema Evolution — Hinzufuegen einer Spalte ohne Neuschreiben vorhandener Daten. Fuer die Migration von rohem Parquet genuegt die Konvertierung bestehender Dateien mit dem Befehl CONVERT TO DELTA.
Zusammenfassung¶
Delta Lake bringt Warehouse-Zuverlässigkeit in den Data Lake. Grundlage der Lakehouse-Architektur.