Delta Lake en Databricks: transacciones ACID para datos a escala
João Barros
08 de August de 2024
2 min de lectura
Delta Lake es una capa de almacenamiento open-source que añade fiabilidad transaccional a los archivos Parquet en el Data Lake. En Databricks, es el formato por defecto para todas las tablas, aportando garantías ACID que el Parquet simple no ofrece.
Qué aporta Delta Lake
- ACID Transactions — las operaciones atómicas garantizan que el estado de la tabla es siempre consistente, incluso con fallos a mitad.
- Schema Enforcement — rechaza la escritura de datos con esquema incompatible, evitando corrupción silenciosa.
- Time Travel — acceso a versiones anteriores de la tabla por timestamp o número de versión.
- Upserts con MERGE — operaciones de insert/update/delete atómicas en una única instrucción.
Crear y escribir una tabla Delta
# PySpark
df.write.format("delta").mode("overwrite").save("/mnt/datalake/silver/ventas")
# O vía SQL
CREATE TABLE ventas USING DELTA LOCATION '/mnt/datalake/silver/ventas'
Time Travel
# Por número de versión
df_v3 = spark.read.format("delta").option("versionAsOf", 3).load("/mnt/datalake/silver/ventas")
# Por timestamp
df_ene = spark.read.format("delta").option("timestampAsOf", "2024-01-01").load("/mnt/datalake/silver/ventas")
MERGE (Upsert)
from delta.tables import DeltaTable
delta_tbl = DeltaTable.forPath(spark, "/mnt/datalake/silver/ventas")
delta_tbl.alias("tgt").merge(
df_nuevos.alias("src"),
"tgt.id_venta = src.id_venta"
).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute()
Optimizar y hacer vacuum
OPTIMIZE ventas ZORDER BY (fecha_venta, id_cliente)
VACUUM ventas RETAIN 168 HOURS -- mantener 7 días de historial
Conclusión
Delta Lake es la base de cualquier Data Lakehouse moderno. En Databricks, está integrado de forma nativa y activo por defecto — aproveche MERGE para la ingesta incremental y Time Travel para auditorías y recuperación de errores.