Delta Lake no Databricks: transacções ACID para dados em escala
João Barros
08 de August de 2024
2 min de leitura
O Delta Lake é uma camada de armazenamento open-source que adiciona fiabilidade transaccional aos ficheiros Parquet no Data Lake. No Databricks, é o formato padrão para todas as tabelas, trazendo garantias ACID que o Parquet simples não oferece.
O que traz o Delta Lake
- ACID Transactions — operações atómicas garantem que o estado da tabela é sempre consistente, mesmo com falhas a meio.
- Schema Enforcement — rejeita escrita de dados com schema incompatível, evitando corrupção silenciosa.
- Time Travel — acesso a versões anteriores da tabela por timestamp ou número de versão.
- Upserts com MERGE — operações de insert/update/delete atómicas numa única instrução.
Criar e escrever uma tabela Delta
# PySpark
df.write.format("delta").mode("overwrite").save("/mnt/datalake/silver/vendas")
# Ou via SQL
CREATE TABLE vendas USING DELTA LOCATION '/mnt/datalake/silver/vendas'
Time Travel
# Por número de versão
df_v3 = spark.read.format("delta").option("versionAsOf", 3).load("/mnt/datalake/silver/vendas")
# Por timestamp
df_jan = spark.read.format("delta").option("timestampAsOf", "2024-01-01").load("/mnt/datalake/silver/vendas")
MERGE (Upsert)
from delta.tables import DeltaTable
delta_tbl = DeltaTable.forPath(spark, "/mnt/datalake/silver/vendas")
delta_tbl.alias("tgt").merge(
df_novos.alias("src"),
"tgt.id_venda = src.id_venda"
).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute()
Optimizar e fazer vacuum
OPTIMIZE vendas ZORDER BY (data_venda, id_cliente)
VACUUM vendas RETAIN 168 HOURS -- manter 7 dias de histórico
Conclusão
O Delta Lake é o alicerce de qualquer Data Lakehouse moderno. No Databricks, está integrado de forma nativa e activo por defeito — tire partido do MERGE para ingestão incremental e do Time Travel para auditorias e recuperação de erros.