Cómo validar particiones de fecha en ELT: paso a paso
Este tutorial muestra cómo validar particiones de fecha en ELT para garantizar consistencia, evitar huecos y mejorar el rendimiento de las consultas. Validar particiones de fecha es útil para detectar fallos de carga, archivos corruptos y problemas de retención antes de que afecten a informes o pipelines downstream.
Prerequisitos
- Acceso a un entorno con soporte de archivos/Delta (por ejemplo: Data Lake con Delta Lake o parquet) y SQL/Notebooks.
- Herramientas para ejecutar SQL o Python (por ejemplo: Databricks, Synapse, o otro entorno con Spark/SQL).
- Conocimientos básicos de ELT, particiones por fecha (date, year/month/day) y comandos SQL/Python.
Paso 1: Identificar el esquema de partición
Comprender cómo están particionados los datos: por date, year/month/day o por otra convención. Esto permite construir comprobaciones específicas (huecos, formatos inválidos, metadatos).
# Exemplo SQL para ver estrutura de partição (Delta ou Hive metastore) DESCRIBE DETAIL nome_da_tabela; -- ou SHOW PARTITIONS nome_da_tabela LIMIT 100;
Paso 2: Listar particiones esperadas
Generar la lista de fechas que deberían existir en el periodo de interés. Esto ayuda a detectar huecos (missing partitions) en el intervalo de carga.
# Exemplo Python (Spark) para gerar datas esperadas entre start_date e end_date from pyspark.sql.functions import sequence, to_date, explode, lit start = '2026-09-01' end = '2026-09-10' dates_df = spark.sql(f"SELECT explode(sequence(to_date('{start}'), to_date('{end}'), interval 1 day)) as dt") dates_df.show()
Paso 3: Obtener particiones reales
Extraer las particiones efectivamente presentes en el almacenamiento/metastore. Para Delta/Hive, podemos consultar las particiones o inferir a partir de las rutas de archivo.
# Exemplo SQL para obter partições reais (tabela particionada por dt) SELECT DISTINCT dt FROM nome_da_tabela ORDER BY dt; -- Ou listar ficheiros no diretório de data: /data/tabela/dt=YYYY-MM-DD/
Paso 4: Comparar esperado vs real y reportar huecos
Hacer la unión entre las fechas esperadas y las reales para identificar días faltantes. Reportar resultados para alertas o triggers de backfill.
# Exemplo Spark SQL juntando datas esperadas e reais dates_df.createOrReplaceTempView('expected_dates') spark.sql("""
SELECT e.dt as date_expected, r.dt as date_present
FROM expected_dates e
LEFT JOIN (SELECT DISTINCT dt FROM nome_da_tabela) r
ON e.dt = r.dt
WHERE r.dt IS NULL
ORDER BY e.dt
""").show()
Paso 5: Verificar integridad de los archivos por partición
Detectar archivos corruptos o con schema diferente que provoquen errores en las lecturas. Podemos intentar leer cada partición y capturar excepciones; también validar número de archivos y tamaño mínimo.
# Exemplo Python para validar leitura por partição e contar ficheiros from pyspark.sql.utils import AnalysisException partitions = [r['dt'] for r in spark.sql("SELECT DISTINCT dt FROM nome_da_tabela").collect()] bad_partitions = [] for p in partitions: path = f"/data/nome_da_tabela/dt={p}" try: df = spark.read.format('delta').load(path) # ou parquet cnt = df.count() if cnt == 0: bad_partitions.append((p, 'empty')) except Exception as e: bad_partitions.append((p, str(e))) print('Partições com problemas:', bad_partitions)
Paso 6: Validar metadatos y estadísticas por partición
Comprobar columnas clave (ej.: id, timestamp) para valores nulos, tipos inesperados o outliers por partición. Calcular estadísticas básicas ayuda a detectar regresiones.
# Exemplo SQL para checar nulos e contar por partição SELECT dt, COUNT(*) as rows, SUM(CASE WHEN id IS NULL THEN 1 ELSE 0 END) as id_nulls, MIN(event_time) as min_time, MAX(event_time) as max_time FROM nome_da_tabela GROUP BY dt ORDER BY dt;
Verificar el resultado
Confirme que:
- No existen fechas faltantes en la ventana analizada (resultado del Paso 4 vacío).
- La lista de bad_partitions del Paso 5 está vacía o solo contiene casos explicables.
- Las estadísticas por partición (Paso 6) están dentro de los límites esperados (rows, id_nulls, min/max ok).
Conclusión
Validar particiones de fecha en ELT previene fallos de carga y degradación del rendimiento. Próximos pasos: automatizar estas comprobaciones como parte del pipeline (jobs programados) e integrar alertas/rollback para particiones con fallos. Consejo: empieza por monitorizar una ventana corta (7-14 días) para reducir falsos positivos y ajustar límites.