Exposicion de Resultados - osozzz/BachArchitecture-TT GitHub Wiki

📝 Wiki – Subpágina: Exposición de Resultados

🌍 Objetivo 3 – Exposición de Resultados

Esta etapa detalla cómo exponer los resultados procesados del pipeline para su consumo vía:

  • 🔎 Amazon Athena (consultas SQL serverless)
  • 🔗 API REST (FastAPI + Docker en EC2)

🔸 Paso 1 – Crear base de datos en AWS Glue

Desde consola o CLI:

aws glue create-database --database-input '{"Name":"bacharchitecture_db"}'

📸 Captura Relevante: Página de Glue > Databases con bacharchitecture_db.

WhatsApp Image 2025-06-02 at 16 06 54_12bbfa79

WhatsApp Image 2025-06-02 at 16 08 23_5f87c546


🔸 Paso 2 – Crear tablas externas en Athena

Puedes hacerlo desde consola Athena o usando el script create_athena_tables.py.

Tabla 1 – city_summary (CSV)

CREATE EXTERNAL TABLE IF NOT EXISTS bacharchitecture_db.city_summary (
  city STRING,
  avg_temp_max DOUBLE,
  avg_temp_min DOUBLE,
  avg_precipitation DOUBLE,
  avg_windspeed DOUBLE
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim' = ',')
LOCATION 's3://bacharchitecture/refined/summary/'
TBLPROPERTIES ('skip.header.line.count'='1');

Tabla 2 – city_clusters (Parquet)

CREATE EXTERNAL TABLE IF NOT EXISTS bacharchitecture_db.city_clusters (
  city STRING,
  temperature_max DOUBLE,
  temperature_min DOUBLE,
  precipitation DOUBLE,
  windspeed DOUBLE,
  features STRUCT<type:STRING, values:ARRAY<DOUBLE>>,
  prediction INT
)
STORED AS PARQUET
LOCATION 's3://bacharchitecture/refined/clusters/';

📸 Captura Relevante: Vista de las tablas en consola Athena.

WhatsApp Image 2025-06-02 at 16 10 05_5a26c589

WhatsApp Image 2025-06-02 at 16 12 58_0e9b97b2


Consultar datos con SQL

SELECT * FROM bacharchitecture_db.city_summary;
SELECT city, prediction, COUNT(*) FROM bacharchitecture_db.city_clusters GROUP BY city, prediction;

📸 Captura Relevante: Resultado de una consulta en consola Athena.

WhatsApp Image 2025-06-02 at 16 12 00_ae296afe

WhatsApp Image 2025-06-02 at 16 13 52_b37f9d51


🔸 Paso 3 – Crear API REST con FastAPI

3.1 Estructura del proyecto

api/
├── main.py
├── services/
│   └── athena_client.py
├── requirements.txt
└── Dockerfile

3.2 Contenido básico de main.py

from fastapi import FastAPI
from services.athena_client import query_athena_summary, query_clusters

app = FastAPI(title="BachArchitecture API")

@app.get("/summary")
def get_summary():
    return query_athena_summary()

@app.get("/clusters")
def get_clusters():
    return query_clusters()

3.3 Cliente Athena en athena_client.py

import boto3
import pandas as pd
import time

athena = boto3.client("athena", region_name="us-east-1")
S3_OUTPUT = "s3://bacharchitecture/athena-results/"

def run_query(query):
    execution = athena.start_query_execution(
        QueryString=query,
        ResultConfiguration={"OutputLocation": S3_OUTPUT}
    )
    qid = execution["QueryExecutionId"]

    while True:
        result = athena.get_query_execution(QueryExecutionId=qid)
        if result["QueryExecution"]["Status"]["State"] in ["SUCCEEDED", "FAILED"]:
            break
        time.sleep(1)

    output = f"{S3_OUTPUT}{qid}.csv"
    return pd.read_csv(output).to_dict(orient="records")

🔸 Paso 4 – Dockerizar la API

Dockerfile

FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

4.1 Construir y ejecutar en EC2

docker build -t bachapi .
docker run -d -p 8000:8000 --name bachapi_container bachapi

🔸 Paso 5 – Acceder a la API REST

Navega a:

http://<IP_PUBLICA_EC2>:8000/docs

Verás la documentación Swagger con endpoints /summary y /clusters.

📸 Capturas Relevante:

WhatsApp Image 2025-06-02 at 16 32 39_3a28212a

WhatsApp Image 2025-06-02 at 17 22 03_0f044ebb


✅ Resultado Final

  • Datos refinados accesibles vía SQL en Athena
  • API REST con documentación Swagger
  • Preparado para conectar con dashboards, aplicaciones web o móviles

⚠️ **GitHub.com Fallback** ⚠️