Data Lakes: Almacenamiento Flexible a Cualquier Escala
Un Data Lake almacena datos en su formato original a cualquier escala. A diferencia de un Data Warehouse que requiere esquemas previos, un Data Lake acepta todo y permite definir estructura al consultar (schema-on-read).
| Caracteristica | Data Lake | Data Warehouse | Lakehouse |
|---|---|---|---|
| Formato | Archivos (Parquet, JSON) | Tablas optimizadas | Tablas sobre archivos |
| Esquema | Schema-on-read | Schema-on-write | Schema enforcement |
| ACID | No | Si | Si (Delta/Iceberg) |
| Costo | Muy bajo (storage) | Alto (compute+storage) | Bajo-Medio |
from delta import DeltaTable
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName('DeltaLakeDemo') \
.config('spark.jars.packages', 'io.delta:delta-spark_2.12:3.1.0') \
.getOrCreate()
# Escribir tabla Delta
df_ventas.write.format('delta').mode('overwrite') \
.partitionBy('year', 'month') \
.save('s3://data-lake/delta/ventas/')
# MERGE (upsert)
delta_table = DeltaTable.forPath(spark, 's3://data-lake/delta/ventas/')
delta_table.alias('target').merge(
df_nuevas.alias('source'),
'target.order_id = source.order_id'
).whenMatchedUpdateAll() \
.whenNotMatchedInsertAll() \
.execute()
# Time Travel
df_ayer = spark.read.format('delta') \
.option('versionAsOf', 5) \
.load('s3://data-lake/delta/ventas/')Arquitectura Medallion
Bronze (Raw): Datos crudos, append-only.
Silver (Cleaned): Datos limpiados, deduplicados.
Gold (Business): Modelos dimensionales, listos para dashboards y ML.
🚀 Delta vs Iceberg
Delta Lake: Mejor con Databricks, mas maduro. Apache Iceberg: Vendor-neutral, mejor multi-engine. Para LATAM: Databricks = Delta, AWS/GCP nativo = Iceberg.
| Servicio | 1 TB/mes | 10 TB/mes | 100 TB/mes |
|---|---|---|---|
| AWS S3 | USD 23 | USD 230 | USD 2,300 |
| GCS | USD 20 | USD 200 | USD 2,000 |
| Azure Blob | USD 18 | USD 184 | USD 1,840 |