Lakeflow, lección 2 de 17

Streaming Tables vs Materialized Views

Christian Herrera7 min de lectura orientativa

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

Interactivo

Streaming Table

Ticket 1

100 €

Ticket 2

50 €

Ticket 3

75 €

3 tickets

Materialized View

SUM(amount)

225 €

Último refresh

Actualizado

Resultado: 225 €

La Materialized View ya refleja los tres tickets.
Simulación conceptual con un pipeline de ejecución por disparadores. En producción, las actualizaciones dependen de la configuración y ejecución del pipeline.

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

python

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

python

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.