Streaming Tables vs Materialized Views
Objetivo: entender cuándo utilizar cada una y qué ocurre cuando los datos se insertan, modifican o eliminan.
1. La diferencia fundamental
Streaming Table
Procesa incrementalmente nuevos eventos, normalmente una sola vez.
Ideal para:
Ingesta, limpieza y transformación de eventos append-only.
Materialized View
Mantiene un resultado actualizado según el estado de los datos fuente.
Ideal para:
Agregaciones, KPIs y transformaciones con datos cambiantes.
La Streaming Table es especialmente eficiente procesando eventos nuevos. La Materialized View puede incorporar inserciones, actualizaciones y eliminaciones de las fuentes al refrescarse.
Databricks on AWS+1
2. Ejemplo: llegan tickets desde Kafka
Tenemos una tabla Bronze con estos datos:
Simulador: llegan nuevos tickets
InteractivoStreaming Table
Ticket 1
100 €
Ticket 2
50 €
Ticket 3
75 €
3 tickets
Materialized View
SUM(amount)225 €
Último refreshActualizado
Resultado: 225 €
La Materialized View ya refleja los tres tickets.3. ¿Y si cambia un ticket existente?
Supongamos que el ticket 1 pasa de 100 € a 120 € en la tabla fuente.
Operación en origen | Streaming Table convencional | Materialized View |
|---|---|---|
INSERT | Procesa el registro nuevo | Incorpora el nuevo dato |
UPDATE | No aplica automáticamente el cambio a la fila ya procesada | Refleja la modificación tras refresh |
DELETE | No elimina automáticamente la fila procesada | Refleja la eliminación tras refresh |
Importante: estamos hablando de Streaming Tables append-only convencionales. Lakeflow también permite gestionar actualizaciones y eliminaciones mediante AUTO CDC, que estudiaremos en la lección 8.
4. El código: solo cambia una línea fundamental
Streaming Table — Silver
from pyspark import pipelines as dp
@dp.table(name="silver_tickets")
def silver_tickets():
return (
spark.readStream.table("bronze_tickets")
.filter("amount > 0")
)
Materialized View — Gold
from pyspark import pipelines as dp
from pyspark.sql import functions as F
@dp.materialized_view(name="gold_sales")
def gold_sales():
return (
spark.read.table("silver_tickets")
.agg(F.sum("amount").alias("total"))
)
Observa la diferencia:
spark.readStream→ lectura incremental en streaming.spark.read→ lectura batch declarativa; Lakeflow puede optimizar incrementalmente el refresh de la MV.
¡Ojo! Una MV no necesariamente recalcula toda la tabla en cada refresh. Databricks intenta procesar únicamente los cambios cuando la consulta lo permite.
Databricks on Google Cloud+1
5. Comprueba lo aprendido
Imagina tu plataforma de tickets de Serbia:
Los eventos llegan desde Kafka constantemente. Necesitas:
Guardar los tickets procesados en Silver.
Calcular el importe total de ventas por farmacia para Power BI.
¿Qué combinación elegirías?
¡Correcto!
Para eventos append-only, Silver puede procesarlos incrementalmente. Gold agrega y mantiene los KPIs actualizados. Si los tickets tienen correcciones o borrados, tendremos que considerar CDC o una MV también en Silver.Qué debes recordar: Streaming Table = procesar nuevos eventos. Materialized View = mantener actualizado el resultado de una consulta. Ninguna de las dos obliga por sí sola a ejecutar el pipeline continuamente.
Una idea más en tu cuaderno.
Marca esta lección cuando hayas terminado de repasarla.
Material importado del curso original. Simulaciones conservadas como ejemplos estáticos; para sus controles interactivos, consulta el original.