Lakeflow, lección 11 de 17

Incremental Refresh y gestión del estado

Christian Herrera8 min de lectura orientativa

Objetivo: entender cómo Lakeflow actualiza datos sin recalcularlo todo, cuándo necesita hacerlo y cómo afecta a los costes.

1. Dos formas diferentes de procesar incrementalmente

Imagina que tenemos 10 millones de tickets en Bronze y llegan 1.000 tickets nuevos.

Streaming Table

Checkpoint

Ya procesados

10.000.000

Nuevos por procesar

1.000

El checkpoint indica por dónde continuar. Solo se procesan los nuevos registros.

Materialized View

Incremental Refresh

Resultado materializado

Ventas por farmacia

Farmacia 109

5.000 €

5.200 €

Lakeflow puede detectar las modificaciones de origen y actualizar únicamente los resultados afectados.

La diferencia fundamental:

  • Streaming Table: procesa incrementalmente las entradas pendientes.

  • Materialized View: mantiene actualizado el resultado de una consulta, utilizando incremental refresh cuando es posible.

Databricks on Google Cloud+1

2. Código: una Materialized View incremental

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")
        .groupBy("pharmacy_id")
        .agg(
            F.sum("amount").alias("total_sales")
        )
    )

Fíjate en algo sorprendente: no hay ninguna instrucción explícita para hacer incremental refresh.

Lakeflow analiza la consulta, los cambios en las fuentes y su coste estimado para decidir cómo refrescar el resultado.

Pero hay una condición importante: el refresco incremental de Materialized Views requiere Serverless. En compute clásico, estas vistas se recalculan completamente. Databricks on Google Cloud

3. Simulador: incremental vs full recompute

Llega una venta de 200 € a la farmacia 109

Incremental

Full recompute

Farmacia

Ventas

Cálculo

109

5200 €

Recalculado

197

3000 €

Recalculado

241

1000 €

Recalculado

Trabajo ilustrativo

Todos los datos de origen

Se reevalúa la consulta completa a partir de los datos disponibles.

Modelo conceptual: Databricks puede escoger entre distintos algoritmos incrementales, y no garantiza procesar únicamente una farmacia.

4. ¿Cuándo hace Lakeflow un Full Recompute?

Aunque utilices una Materialized View, Lakeflow puede recalcularlo todo si:

  • La consulta contiene operaciones que no admiten procesamiento incremental.

  • Los cambios en la fuente impiden un refresco incremental seguro.

  • El optimizador estima que recalcular resulta más eficiente.

  • Ejecutas explícitamente un Full Refresh.

En general, consultas deterministas y agregaciones sencillas favorecen el procesamiento incremental. Databricks on Google Cloud

Por eso no basta con declarar una Materialized View: hay que comprobar cómo se está actualizando realmente.

5. ¿Cómo saber si tu MV se actualiza incrementalmente?

En Databricks, abre tu pipeline y consulta la columna Incrementalization de la tabla correspondiente.

Puede mostrar:

Estado

Significado

Incremental

Procesamiento incremental

Full recompute

Recalculó toda la consulta

No change

No detectó cambios que actualizar

También puedes inspeccionar el Event Log:

sql
SELECT
    timestamp,
    message
FROM event_log(
    TABLE(dev_catalog.demo_lakeflow.gold_sales)
)
WHERE event_type = 'planning_information'
ORDER BY timestamp DESC;

Verás técnicas como GROUP_AGGREGATE, ROW_BASED o FULL_RECOMPUTE. Databricks on Google Cloud

6. ¿Qué pasa si cambiamos el código?

Este punto es especialmente importante en producción.

Supongamos que Silver es una Streaming Table y cambiamos:

python
.filter("amount > 0")

por:

python
.filter("amount >= 0")

¿Se reprocesan automáticamente los 10 millones de tickets anteriores?

No. Una actualización normal de una Streaming Table procesa los nuevos registros. Los anteriores ya están escritos.

En cambio, una Materialized View debe mantener el resultado conforme a su definición actual, por lo que puede necesitar recalcular todos los datos.

Operación

Streaming Table

Materialized View

Refresh normal

Procesa nuevos registros

Actualiza resultado

Cambio de lógica

No reescribe automáticamente el histórico

Puede recalcular el histórico

Full Refresh

Borra datos y checkpoints, vuelve a leer el origen

Recalcula toda la vista

Precaución: nunca hagas un Full Refresh de una Bronze conectada directamente a Kafka sin comprobar antes la retención. Si Kafka ya eliminó eventos antiguos, no podrás reconstruirlos desde allí.

Databricks on Google Cloud+1

7. Mini ejercicio

Tu tabla Silver contiene 50 millones de tickets y alimenta una Materialized View Gold con las ventas por farmacia.

Cada hora llegan 20.000 tickets adicionales.

¿Qué estrategia elegirías para evitar recalcular los 50 millones en cada actualización?

¡Correcto!

Serverless permite incremental refresh en Materialized Views compatibles. Después debemos verificar el plan real y medir cuánto cuesta.

Qué debes recordar:

  • Streaming Tables usan checkpoints para continuar el procesamiento.

  • Materialized Views pueden actualizar resultados de forma incremental.

  • Incremental refresh de MVs requiere Serverless.

  • Full Refresh no es una operación inocua, especialmente cuando hay fuentes con retención limitada.

En la lección 12 aprenderemos a recuperarnos de fallos reales sin duplicar eventos ni perder información.

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.