Este proyecto implementa un sistema de corrección automática de valores inválidos en la base de datos meteorológica meteo. El proceso analiza la tabla observations e identifica valores numéricos iguales a -32768, interpretados como datos erróneos. Posteriormente, aplica un criterio determinista para reemplazarlos por valores coherentes obtenidos a partir de registros válidos de la misma estación.
La solución fue desarrollada en Python y utiliza procesamiento paralelo mediante multiprocessing para mejorar el rendimiento en bases de datos con grandes volúmenes de información. Todas las operaciones sobre PostgreSQL se realizan de forma transaccional y con manejo explícito de errores.
El proyecto funciona correctamente en Ubuntu Server 24.04 LTS (64 bits).
El programa está estructurado en módulos independientes, cada uno con una responsabilidad específica:
Gestiona la configuración del sistema y la interfaz de línea de comandos. Valida parámetros de conexión, número de procesos, tamaño de bloque y modos adicionales de ejecución.
Encapsula la conexión a PostgreSQL. Permite:
- Validar la existencia de la tabla y sus columnas
- Leer filas por estaciones en bloques paginados
- Obtener valores vecinos válidos
- Calcular promedios de estación
- Ejecutar actualizaciones idempotentes dentro de transacciones
Implementa el criterio determinista de corrección:
- Si el valor no es
-32768, no se modifica. - Si es
-32768, se procede así:- Si existe un valor previo y uno posterior válidos, se usa su promedio.
- Si solo existe uno de ellos, se utiliza dicho valor.
- Si no existen valores vecinos, se utiliza el promedio global de la estación.
- Si la estación carece de valores válidos, no se corrige el dato.
Orquesta el procesamiento paralelo. Divide las estaciones entre procesos, reconstruye la configuración en cada worker, corrige por bloques y consolida las métricas obtenidas.
Registra y presenta las estadísticas del procesamiento:
- Filas procesadas
- Correcciones por columna
- Correcciones por estación
- Errores detectados durante la ejecución
Punto de entrada del sistema. Valida la base de datos, inicia el procesamiento paralelo y emite el resumen final.
- Corrección determinista de valores inválidos.
- Procesamiento paralelo por estación sin solapamientos.
- Manejo de memoria mediante lectura paginada por bloques.
- Ejecución idempotente: no altera valores corregidos previamente.
- Conexiones independientes por proceso para evitar bloqueos.
- Validación de esquema y columnas antes del procesamiento.
- Manejo robusto de transacciones, fallos y errores.
- Python 3.7 o superior
(Ubuntu 24.04 incluye Python 3.12 por defecto). - PostgreSQL instalado y en ejecución.
- Biblioteca
psycopg2-binaryinstalada mediantepip.
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
sudo apt install postgresql postgresql-contrib -y
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
psql -U postgres -d meteo -f meteo.sql
python3 main.py --database meteo --password tu_contraseña --verbose
El programa acepta parámetros de conexión y control de ejecución, tales como:
--host--port--user--password--database--processes(número de procesos paralelos)--chunk-size(cantidad de filas por bloque)--verbose--diagnostic
Variables de entorno soportadas: PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD.
El sistema genera un resumen con:
- Total de filas procesadas.
- Cantidad de valores corregidos por columna.
- Cantidad de valores corregidos por estación.
- Errores detectados durante el procesamiento.
- Integrantes del grupo.
El mensaje final indica si el proceso fue exitoso o si existieron inconsistencias.
El proyecto incluye una guía extendida que proporciona:
- Procedimiento detallado de instalación.
- Solución a problemas frecuentes.
- Recomendaciones de optimización en servidores Linux.
- Configuración como servicio del sistema operativo (opcional).
El proyecto está completamente funcional, probado y optimizado para su ejecución en Ubuntu Server 24.04. No requiere cambios adicionales para su operación estándar.