Mini ETL Processor en Java Puro
Descripción
Este proyecto es una aplicación de consola en Java que implementa un proceso ETL (Extract-Transform-Load) completo desde cero, sin el uso de frameworks como Spring. La aplicación lee datos de usuarios desde un archivo .csv, los limpia, valida y transforma según reglas de negocio específicas, y finalmente carga los registros válidos en una base de datos SQLite.
Reglas del negocio (Transformación): Nombre: Quiero que se guarde en formato "Title Case" (la primera letra de cada palabra en mayúscula) y sin espacios extra al principio o al final. Por ejemplo, ana perez debe ser Ana Perez. Email: Debe ser un email válido (que contenga un @ y un . después del @). Los que no sean válidos, como carlos@, deben ser descartados. Además, sin espacios extra. Fecha de Registro: Debe tener el formato YYYY-MM-DD. Registros con fechas inválidas como "ayer" deben ser descartados. Errores: Necesito un registro de qué líneas del CSV no se pudieron procesar y por qué. No quiero que el programa se detenga por una línea mala, debe continuar con las demás. El objetivo de este proyecto es demostrar un sólido entendimiento de los fundamentos de Java, el diseño de software orientado a objetos, la interacción con bases de datos mediante JDBC puro y la implementación de prácticas profesionales como el logging y la configuración externa.
Tecnologías Utilizadas Lenguaje: Java 21 Base de Datos: SQLite Conectividad DB: JDBC (Java Database Connectivity) Logging: SLF4J (fachada) y Logback (implementación)
Características Clave Proceso ETL Completo: Implementa las tres fases (Extracción, Transformación y Carga) demostrando el manejo de la lógica de negocio desde cero. Validación de Datos Robusta: Cada registro es sometido a un riguroso proceso de validación de formato y reglas de negocio para asegurar la integridad de los datos. Manejo de Errores Controlado: El programa no se detiene ante registros inválidos. En su lugar, los reporta de forma individual y continúa procesando el resto del archivo. Idempotencia: El sistema puede ejecutarse múltiples veces con el mismo archivo de entrada sin generar errores por datos duplicados, gracias al manejo de las restricciones de la base de datos. Configuración Externa: El nombre del archivo CSV de entrada se proporciona como un argumento de línea de comandos, haciendo la herramienta flexible y reutilizable. Logging Profesional: Todos los eventos importantes, advertencias y errores se registran en un archivo de log persistente (etl_log.log) para facilitar la auditoría y depuración del proceso.
Cómo Ejecutarlo Sigue estos pasos desde una terminal para compilar y ejecutar el proyecto.
-
Requisitos Tener instalado un JDK (Java Development Kit). Tener Git instalado (para clonar el repositorio).
-
Instalación Clona este repositorio en tu máquina local: git clone https://github.com/dcoder32/java-portfolio.git cd java-portfolio/MiniETLProcessor
-
Compilación El proyecto no utiliza Maven o Gradle, por lo que se debe compilar manualmente. Estando en la raíz del proyecto, ejecuta el siguiente comando. Este compilará todos los archivos .java de la carpeta src y dejará los .class en una nueva carpeta out. Linux/macOS: javac -d out -cp "lib/" $(find src -name ".java")
Windows: javac -d out -cp "lib*" src\dcoder32\etl\main\Main.java
- Ejecución Una vez compilado, ejecuta el programa pasándole la ruta al archivo CSV que quieres procesar como argumento. Linux: java -cp "out:lib/*" dcoder32.etl.main.Main usuarios.csv
Windows java -cp "out;lib*" dcoder32.etl.main.Main usuarios.csv
"out:lib/*": Le dice a Java que busque las clases compiladas en la carpeta out y las librerías necesarias en la carpeta lib. dcoder32.etl.main.Main: Es el nombre completo de la clase principal a ejecutar. usuarios.csv: Es el argumento con la ruta al archivo de datos. Después de la ejecución, los resultados del procesamiento se mostrarán en la consola y se generará un archivo etl_log.log con el registro detallado de la operación.