Cómo validar la calidad de datos en Lakehouse: paso a paso
Este tutorial muestra cómo implementar validaciones de calidad de datos en Lakehouse para detectar esquemas inconsistentes, valores nulos o reglas de negocio violadas. Garantizar la calidad en el Lakehouse evita análisis engañosos y fallos en pipelines downstream.
Pre-requisitos
- Cuenta con acceso al Lakehouse en Microsoft Fabric o entorno compatible con Delta Lake.
- Fichero de origen (CSV/Parquet) cargado en el almacenamiento asociado al Lakehouse.
- Permisos para crear tablas Delta y ejecutar PySpark/SQL en el workspace.
- Conocimientos básicos de SQL y PySpark.
Paso 1: Definir reglas de calidad (Data Quality Rules)
Antes del código, lista las reglas que quieres validar: esquema obligatorio, columnas no nulas, valores dentro de rango, unicidad y comprobaciones de formato (por ej., email). Estas reglas se aplicarán a la tabla Delta del Lakehouse.
Paso 2: Crear tabla Delta de ejemplo
Crea una tabla Delta simple con datos de ejemplo para probar las validaciones. Esto ayuda a reproducir errores comunes como tipos incorrectos o valores nulos.
-- SQL no endpoint do Lakehouse
CREATE TABLE IF NOT EXISTS vendas_delta (
id STRING,
data DATE,
cliente_email STRING,
valor DOUBLE
)
USING delta;
-- Inserir alguns registos de teste
INSERT INTO vendas_delta VALUES
('1','2026-10-01','cliente1@example.com',100.0),
('2',NULL,'cliente2@example',NULL),
('3','2026-10-03','',50.0);
Paso 3: Validar esquema y tipos con PySpark
Carga la tabla Delta como DataFrame y valida tipos y columnas obligatorias. Si hay divergencias, regístralas para revisión.
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when
spark = SparkSession.builder.getOrCreate()
df = spark.read.format('delta').table('vendas_delta')
# Verificar colunas esperadas
expected_cols = {'id','data','cliente_email','valor'}
missing = expected_cols - set(df.columns)
if missing:
print('Colunas em falta:', missing)
# Validar tipos básicos (exemplo simples)
# Aqui assumimos que valor deve ser double e data deve ser date
# Converter e contar falhas
bad_valor = df.filter(col('valor').isNull())
print('Registos com valor nulo:', bad_valor.count())
bad_data = df.filter(col('data').isNull())
print('Registos com data nula:', bad_data.count())
Paso 4: Validar reglas de negocio (unicidad, formato)
Aplica comprobaciones específicas: unicidad del id y formato del email. Usa funciones SQL o PySpark para encontrar violaciones y generar un informe.
# Unicidade de id
dups = df.groupBy('id').count().filter('count > 1')
print('IDs duplicados:', dups.count())
# Validação simples de email (contém @ e .)
from pyspark.sql.functions import length
bad_email = df.filter(~(col('cliente_email').rlike('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')))
print('Emails inválidos:', bad_email.count())
Paso 5: Registrar resultados de validación en tabla de auditoría
Crear una tabla Delta de auditoría permite rastrear fallos a lo largo del tiempo y automatizar alertas. Inserta una fila por fallo con timestamp y tipo de error.
-- Criar tabela de auditoria
CREATE TABLE IF NOT EXISTS dq_audit (
ts TIMESTAMP,
tabela STRING,
tipo_erro STRING,
detalhe STRING
)
USING delta;
-- Exemplo de inserção manual de um erro detectado
INSERT INTO dq_audit VALUES (current_timestamp(),'vendas_delta','EMAIL_INVALIDO','linha id 2: cliente2@example');
Paso 6: Automatizar validaciones con job programado
Pon el script de validación en un pipeline programado (ej.: Notebook programado en Fabric) para ejecutarse tras las cargas ETL. Si se encuentran fallos, puedes notificar por email o registrar una tarea de corrección.
# Pseudo-exemplo: no final do notebook
if bad_email.count() > 0 or bad_data.count() > 0:
# regista resumo na tabela dq_audit
spark.sql("INSERT INTO dq_audit VALUES (current_timestamp(),'vendas_delta','QUEBRAS_QUALIDADE','Verificar registos nulos ou emails')")
# aqui podes adicionar integração com notificações externas
Verificar el resultado
Consulta la tabla dq_audit y la tabla original para confirmar que los fallos fueron detectados y registrados. Valida también que el job programado se ejecuta sin errores y que las métricas (conteos de fallos) corresponden a los datos de prueba.
SELECT * FROM dq_audit ORDER BY ts DESC LIMIT 10;
SELECT id, data, cliente_email, valor FROM vendas_delta LIMIT 20;
Conclusión
Con estos pasos implementaste validaciones básicas de calidad de datos en el Lakehouse, desde comprobaciones de esquema hasta reglas de negocio y auditoría. Próximos pasos: ampliar reglas (por ej.: referencias a otras tablas), crear alertas automáticas e integrar con pipelines ETL. Consejo: empieza sencillo y añade reglas conforme encuentres problemas reales — ¿cuál fue la validación más útil para tu equipo?