El objetivo principal de este proyecto es diseñar, construir y automatizar un pipeline de datos escalable en Azure utilizando los principios de la Arquitectura Medallón (Bronze, Silver, Gold). El flujo de datos consume información de la API pública de la NASA "Near Earth Object Web Service" (NEOWS) para extraer datos diarios de asteroides, los cuales son procesados, limpiados y transformados mediante procesos distribuidos en PySpark dentro de Azure Synapse Analytics, dejándolos listos para la creación de reportes o análisis avanzado.
- Azure Synapse Analytics: Servicio integral para la orquestación (Pipelines) y el procesamiento distribuido de grandes volúmenes de datos usando Apache Spark Pools.
- Azure Data Lake Storage Gen2 (ADLS): Almacenamiento seguro en la nube donde residirán y se particionarán los datos en cada una de las capas (Bronze, Silver, Gold).
- Azure Key Vault: Gestión centralizada y segura de credenciales y secretos (API Keys).
- PySpark (Python): Lenguaje principal de transformación utilizado en los Notebooks para la limpieza y agregación de datos.
- NASA NEOWS API: Fuente original de provisión de datos en formato JSON.
Azure Key Vault:
- Crear un Key Vault en Azure para almacenar la API Key de la NASA.
- Para poder crear y ver el contenido del secreto, es fundamental asignarte el rol de "Key Vault Administrator" (Ir a Access Control IAM > Add role assignment).
- Para permitir que Synapse lea este valor dinámicamente en tiempo de ejecución, se debe asignar el rol "Key Vault Secrets User" a la identidad administrada (Managed Identity) del workspace de Synapse.
- Una vez creado el secreto, obtener el "Secret Identifier" (Identificador del secreto) para su uso en el pipeline.
Azure Data Lake Storage (ADLS):
- Configurar un entorno de Azure Data Lake Storage Gen2 en la suscripción, que típicamente se puede aprovisionar junto al workspace de Synapse.
- Crear contenedores lógicos que representarán nuestra arquitectura de datos en tres etapas: uno para Bronze, otro para Silver y otro para Gold.
- En Synapse Studio, navegar a Manage > Apache Spark Pools.
- Crear un nuevo pool ("sparkpool") con configuración básica para optimizar los costes durante el desarrollo local: Node size (Small), y Autoscale deshabilitado.
El proceso central ha sido modularizado y orquestado mediante 3 Notebooks de PySpark conectados secuencialmente a través de las actividades del Pipeline de Azure Synapse.
-
🥉 Capa Bronze (
01_Get_NASA_Data):- Recibe dinámicamente el valor del secreto de KeyVault paramétricamente.
- Orquesta una solicitud HTTP
GEThacia la API de NEOWS de la NASA obteniendo el registro de los asteroides del día en formato JSON. - Almacena este JSON crudo en la ruta de Bronze de ADLS (
abfss://bronze@<storage_account_name>.dfs.core.windows.net/<START_DATE>/asteroids.json). Esto garantiza que siempre se conserve un historial inmutable del payload original extraído. - Exporta las variables del estado de la ejecución al siguiente notebook usando
mssparkutils.notebook.exit().
-
🥈 Capa Silver (
02_Clean_NASA_Data):- Lee el archivo JSON estructurado desde Bronze.
- Filtra, aplanar (unnest) y formatea los datos. Extrae únicamente los metadatos relevantes para el análisis: nombre, fechas, velocidades, diámetro estimado, distancia a la tierra e indicador de alta peligrosidad (
hazardous). - Calcula nuevas métricas de negocio como el diámetro promedio en kilómetros (
avg_diameter_km). - Almacena el PySpark DataFrame resultante en formato orientando a columnas Parquet dentro del contenedor Silver, particionando de forma eficiente la información por la fecha respectiva (
abfss://silver@<storage_account_name>.dfs.core.windows.net/<START_DATE>/asteroids.parquet).
-
🥇 Capa Gold (
03_Agg_NASA_Data):- Su propósito es disponibilizar información para consumo analítico.
- Realiza dos agrupaciones principales sobre la tabla limpiada en Silver:
asteroid_daily_summary: Extrae resúmenes diarios agrupados por fecha y por año, indicando conteo total de asteroides, conteo de los peligrosos, la velocidad promedio del lote y la distancia más cercana en el día.asteroid_risk_scores: Utilizando métricas previas y álgebra simple, calcula un Score de Riesgo combinando la velocidad, el diámetro promedio y la etiqueta de peligrosidad de cada asteroide.
- La data se guarda nuevamente en formato Parquet, en directorios separados de la capa Gold dividida o agrupada de acuerdo a las necesidades de análisis.
- Orquestación en la nube: Gané comprensión práctica sobre el control de flujo de datos en Azure Synapse, ejecutando y enlazando bloques como KeyVaults, pipelines y Notebooks mediante parámetros de salida (
mssparkutils). - Implementación Medallón Real: Reforcé mi dominio para dividir conceptual y logísticamente los datos en zonas por calidad e ingesta (Raw/Bronze, Cleansed/Silver, Curated/Gold).
- Procesamiento de Datos con PySpark: Profundicé habilidades en la extracción lógica desde esquemas JSON fuertemente anidados en RDDs de Spark, transformarlos con Dataframes, castear estructuras y asegurar la reusabilidad particionando datos al guardar archivos Parquet nativos.
- Seguridad en la integración de plataformas (IAM/RBAC): Manejo correcto de identidades administradas y esquemas Role-Based Access Control para otorgar los principios del mínimo privilegio de Azure evitando fugas de API Keys en el código fuente.
Clic para ver imágenes de ejecución
Actividades del Pipeline y Notebooks

Monitor: Ejecución de pipelines y manejo de errores

Clic para ver los resultados en el ADLS
Bronze (Almacenamiento JSON Raw):

Clic para ver la configuración de permisos y seguridad
Permisos al usuario administrador:

- Permisos de Azure Key Vault - Microsoft Docs
- Uso de Secretos en Data Factory / Synapse - Microsoft Docs
💡 Nota sobre esta documentación: Este documento README.md fue estructurado inicialmente de forma manual, y fue revisado y mejorado utilizando Inteligencia Artificial (IA) para garantizar un formato más profesional y ordenado.







