Puedes leer todo sin registrarte. Solo crearemos un perfil anónimo cuando decidas guardar tu progreso.
Lección 2 de 5
EXPECT y observación
Una cuarentena útil conserva la fila, procedencia, regla incumplida y versión para que pueda corregirse y reprocesarse.
- Duración
- 17 min aprox.
- Objetivo
- Una cuarentena útil conserva la fila, procedencia, regla incumplida y versión para que pueda corregirse y reprocesarse.
- Siguiente paso
- Continuar con la siguiente lección
Ver detalles del módulo
Expectations, cuarentena y event logs
Haz visibles las decisiones de calidad y separa observación, descarte, fallo y remediación.
- Elegir EXPECT, DROP o FAIL
- Diseñar una cuarentena trazable
- Consultar métricas en event logs
02ImplementaciónEXPECT y observación
Una cuarentena útil conserva la fila, procedencia, regla incumplida y versión para que pueda corregirse y reprocesarse.
+
EXPECT y observación
Una cuarentena útil conserva la fila, procedencia, regla incumplida y versión para que pueda corregirse y reprocesarse.
Descartar con una expectation no crea automáticamente una tabla de cuarentena. El patrón explícito clasifica una vista común en salida válida e inválida. La rama inválida añade `failure_reasons`, timestamp, source file u offset y versión de pipeline; la rama válida aplica las mismas condiciones complementarias.
La cuarentena necesita política de acceso porque puede contener PII, retención y un flujo de remediación. Reinyectar datos corregidos directamente en silver salta trazabilidad; conviene publicar una nueva entrada con identidad estable o una tabla de correcciones que pase por las mismas reglas.
Modelo mental
Cuarentena no significa una carpeta donde los datos malos desaparecen; es un producto operativo con identidad, procedencia, causa, estado y ruta de reingreso. El patrón más explicable evalúa reglas una vez, añade un mapa o array de violaciones y divide el DataFrame en válido e inválido. La fila de cuarentena conserva payload original, campos parseados, fuente, coordenada, versión de contrato, tiempo de detección y nombres de reglas. Una reparación produce una nueva versión o evento, no modifica silenciosamente la evidencia. El reingreso utiliza la misma clave de negocio e idempotencia para evitar duplicar el target. Los datos pueden contener PII, por lo que cuarentena necesita controles de acceso y retención al menos tan estrictos como producción. Sus métricas revelan deuda: volumen entrante, edad, porcentaje corregido y causas recurrentes con owner.
Metadatos que identifican origen, posición, versión y transformación mediante los cuales una fila llegó a la decisión de cuarentena.
Permite reproducir el fallo, localizar productores responsables y demostrar que una corrección corresponde al registro exacto.Ciclo explícito de una anomalía, por ejemplo pendiente, investigada, corregida, descartada o reingresada con referencia a evidencia.
Convierte cuarentena en una cola gobernada y permite medir deuda y cumplimiento de tiempos de resolución.Proceso que devuelve una fila corregida al flujo canónico sin crear más de una entidad o aplicar dos veces el mismo cambio.
Evita que solucionar calidad introduzca duplicados y conserva una historia auditable de la reparación.from pyspark.sql import functions as F
classified = (
spark.readStream.table("orders_bronze")
.withColumn(
"failure_reasons",
F.array_compact(F.array(
F.when(F.col("order_id").isNull(), F.lit("MISSING_ORDER_ID")),
F.when(F.col("amount") < 0, F.lit("NEGATIVE_AMOUNT")),
F.when(F.col("event_ts").isNull(), F.lit("INVALID_EVENT_TS")),
))
)
)
valid = classified.where("size(failure_reasons) = 0")
quarantine = classified.where("size(failure_reasons) > 0")Usa una función compartida para que la condición válida sea exactamente el complemento de la cuarentena.
Puntos clave
- Válidos e inválidos deben derivarse de una única clasificación para evitar huecos.
- Cada fila inválida conserva evidencia suficiente para diagnóstico y replay.
- La remediación vuelve a entrar por una frontera gobernada y evita doble conteo.
Evita
- Definir filtros independientes para válidos e inválidos y dejar filas que no caen en ninguna rama.
- Guardar solo un conteo de errores, sin payload ni procedencia para repararlos.
Recuerdo activo