Este proyecto implementa un pipeline completo de datos para el dataset de Olist, utilizando servicios de AWS y un flujo ETL automatizado.
El objetivo es extraer, transformar y cargar (ETL) los datos desde una base PostgreSQL hacia una zona de staging en S3, luego integrarlos con Redshift Serverless mediante Glue Data Catalog, y finalmente conectar el Data Warehouse con una herramienta de visualización.
Flujo del pipeline:
- PostgreSQL (RDS) →
- EC2 (Python + Prefect) →
- S3 (Staging Parquet Zone) →
- AWS Glue (Crawler + Data Catalog) →
- Redshift Serverless (Data Mart / Spectrum) →
- Herramienta BI (QuickSight / Power BI / Tableau)
Se creó un DataMart a partir de las tablas exitentes dentro de olist.sql

Se desarrolló la creación de las tablas dentro del RDS y la carga utilizando EL.py

- Script principal:
ETL.py - Orquestador: Prefect 3.0 (modo local)
- Ejecución automática: Configurada con
crontabpara correr todos los días a las 8 AM. - Carga incremental: Los datos se agregan (
append) en S3 sin sobrescribir los existentes.
El flujo orquesta las siguientes tareas:
- Extracción de datos desde PostgreSQL.
- Transformaciones intermedias y construcción de modelo estrella.
- Carga de datos en S3 (zona de staging).
- Actualización incremental con deduplicación según llave primaria.
El servidor EC2 ejecuta el flujo ETL automáticamente utilizando crontab.
Configuración del cronjob
0 8 * * * cd /home/ubuntu/olist && /home/ubuntu/olist/venv/bin/python /home/ubuntu/olist/etl.py >> /home/ubuntu/olist/etl.log 2>&1Ejecuta el flujo todos los días a las 8:00 a.m.
Guarda los logs en etl.log
Utiliza entorno virtual Python (venv)
Los datos transformados se almacenan en formato Parquet, organizados por carpetas según las tablas del modelo estrella.
s3://olist-staging-zone/staging/
│
├── dim_customer/
├── dim_geography/
├── dim_payment/
├── dim_product/
├── dim_review/
├── dim_seller/
├── dim_time/
└── fact_orders/- Crawler: escanea los archivos Parquet en S3.
- Data Catalog: registra el esquema de cada tabla del modelo estrella.
- Base: olist_catalog
- Namespace: olist-dwh
- Workgroup: default-workgroup
- Conexión: asociada con IAM Role con permisos de acceso a S3 y Glue.
- Acceso externo: Redshift Spectrum consulta directamente los parquet desde S3.
PG_USER=postgres
PG_PASS=******
PG_HOST=<endpoint-RDS>
PG_PORT=5432
PG_DB=olist_db
S3_BUCKET=olist-staging-zone
AWS_ACCESS_KEY_ID=******
AWS_SECRET_ACCESS_KEY=******
AWS_REGION=us-east-1







