M4E4 — Proyecto #3
TLC Pipeline - Parte 3: Construyendo un Data Lake
Este proyecto es la continuación directa de los proyectos anteriores de la TLC.
El objetivo principal de este proyecto es:
📌 Construir un Data Lake end-to-end implementando las capasrawystructured, registrando los datos en Glue Catalog y consultándolos desde AWS Athena.
Descripción del proyecto
Tu tarea en este proyecto es completar la arquitectura del Data Lake que hemos venido construyendo a lo largo del curso.
En el primer proyecto construimos la ingesta inicial de datos desde la página web de la TLC hacia la capa de landing en S3.
En el segundo proyecto automatizamos esa ingesta utilizando Apache Airflow como orquestador.
Ahora, en este proyecto, vamos a completar el pipeline implementando las capas de raw y structured, añadiendo chequeos de calidad de datos, manejando archivos inválidos en una capa de quarantine, y haciendo que los datos sean consultables desde Athena.
La idea es que al final de este proyecto tengas tu primer pipeline de datos end-to-end:
Consideraciones:
- Se recomienda enfocarse inicialmente solo en el dataset de Yellow Trips. Luego se recomienda extender la solución a Green Trips u otros datasets.
- La capa
landingdebe ser tratada como una capa transitoria. - La capa
rawdebe almacenar los datos válidos con mínima transformación. - La capa
structureddebe dejar los datos organizados, tipados, particionados y listos para consulta. - Los archivos que no cumplan los chequeos de calidad deben enviarse a
quarantine.
Outcome final
La solución final debe:
- Ingestar los datos del dataset de Yellow Trips.
- Procesar, como mínimo, los archivos de Yellow Trips para el año 2025.
- Procesar algunos archivos de 2024 para evidenciar diferencias de esquema y probar la lógica de
quarantine. - Mover los archivos válidos desde
landinghaciaraw. - Enviar los archivos inválidos hacia
quarantine. - Transformar los datos desde
rawhaciastructured. - Particionar los datos en la capa
structured. - Mapear los datos en Glue Catalog.
- Hacer los datos consultables a través de AWS Athena.
- Orquestar todo el pipeline utilizando Apache Airflow.
Instrucciones
1. Revisar la arquitectura del Data Lake
Antes de implementar el proyecto, asegúrate de entender el propósito de cada capa del Data Lake.
Vamos a trabajar con las siguientes capas:
- Landing: capa transitoria donde llegan los archivos desde la fuente.
- Raw: capa donde se almacenan los datos válidos con mínima transformación.
- Structured: capa consultable del Data Lake. Aquí los datos deben estar organizados, tipados y particionados.
- Quarantine: capa donde se almacenan los archivos que no cumplen los chequeos de calidad.
La estructura sugerida en S3 puede lucir así:
s3://<your-bucket>/landing/yellow-trips/ s3://<your-bucket>/raw/yellow-trips/ s3://<your-bucket>/structured/yellow-trips/ s3://<your-bucket>/quarantine/yellow-trips/
2. Implementar el proceso de landing a raw
Implementa un proceso encargado de leer los archivos desde la capa landing y decidir si deben enviarse a raw o a quarantine.
Este proceso puede implementarse de dos maneras:
- Usando AWS Lambda + Python.
- Usando AWS Glue + Spark.
📌 Si todavía estás empezando, te recomiendo hacerlo con Lambda.
📌 Si quieres retarte técnicamente, puedes hacerlo con Glue.
Este proceso debe:
- Leer el archivo desde
landing. - Ejecutar chequeos básicos de calidad de datos.
- Validar que el archivo contiene las columnas esperadas. Por ejemplo:
- Validar que el archivo tenga todas las columnas esperadas.
- Validar que el esquema corresponda al formato definido para 2025.
- Validar que el archivo pueda ser leído correctamente.
- Usar como esquema estándar el formato de los archivos de 2025.
- Si el archivo no cumple los chequeos:
- mover el archivo a quarantine;
- registrar el error;
- opcionalmente, enviar una alerta a un correo.
- Si el archivo cumple los chequeos:
- añadir una columna
dsen formatoYYYY-MM-DD; - añadir una columna
file_namecon el nombre original del archivo; - escribir el archivo en
raw; - eliminar el archivo de
landing.
- añadir una columna
La estructura esperada en raw puede lucir así:
s3://<your-bucket>/raw/yellow-trips/yellow_tripdata_2025-01.parquet s3://<your-bucket>/raw/yellow-trips/yellow_tripdata_2025-02.parquet s3://<your-bucket>/raw/yellow-trips/yellow_tripdata_2025-03.parquet
O, si decides particionar desde esta capa:
s3://<your-bucket>/raw/yellow-trips/ds=2025-01-01/ s3://<your-bucket>/raw/yellow-trips/ds=2025-02-01/ s3://<your-bucket>/raw/yellow-trips/ds=2025-03-01/
📌 Nota: para este proyecto, el particionamiento más importante debe ocurrir en structured, porque esta será la primera capa pensada para consulta.3. Implementar la capa structured
Crea un Glue Job (o Lambda function) que tome los archivos desde raw y los escriba en la capa structured.
Este job debe:
- Leer los archivos válidos desde
raw. - Estandarizar los tipos de datos.
- Convertir fechas a tipo
date. - Convertir timestamps a tipo
timestamp. - Convertir columnas numéricas a tipos adecuados como
double,intobigint. - Añadir columnas derivadas si lo consideras útil.
- Escribir los datos en formato columnar, idealmente Parquet.
- Particionar los datos usando
ds.
La estructura recomendada para structured es:
s3://<your-bucket>/structured/yellow-trips/ds=YYYY-MM-DD/
Por ejemplo:
s3://<your-bucket>/structured/yellow-trips/ds=2025-01-01/ s3://<your-bucket>/structured/yellow-trips/ds=2025-02-01/ s3://<your-bucket>/structured/yellow-trips/ds=2025-03-01/
La partición por ds permite que motores como Athena escaneen menos datos al ejecutar consultas, reduciendo costos y mejorando el rendimiento.
4. Registrar los datos en Glue Catalog
Una vez tengas los datos en structured, debes registrarlos en Glue Catalog para que puedan ser consultados desde Athena.
Para esto, crea un Glue Crawler que apunte a la ruta:
s3://<your-bucket>/structured/yellow-trips/
El crawler debe:
- Detectar el esquema de los datos.
- Detectar las particiones.
- Crear o actualizar la tabla en Glue Catalog.
- Dejar la tabla disponible para ser consultada desde Athena.
La tabla puede llamarse: yellow_trips
5. Consultar los datos desde Athena
Con la tabla registrada en Glue Catalog, abre Athena y valida que puedas consultar los datos.
6. Integrar todo dentro de Airflow
Actualiza tu DAG de Airflow para orquestar el pipeline completo.
El DAG debe lucir de la siguiente manera:
start → lambda_ingest → landing_to_raw → raw_to_structured → glue_crawler → end
Donde:
-
lambda_ingestdescarga los datos desde la TLC hacialanding. -
landing_to_rawvalida los archivos y los mueve haciarawoquarantine. -
raw_to_structuredtransforma los datos y los escribe en la capastructured. -
glue_crawleractualiza el catálogo de Glue. -
endmarca el final del pipeline.
Ten en cuenta:
- Debes hacer un backfill para procesar los archivos requeridos.
- Como mínimo, procesa los archivos de 2025.
- Se recomienda incluir algunos archivos de 2024 para probar la lógica de validación y
quarantine. - Asegúrate de que el pipeline pueda ejecutarse de principio a fin desde Airflow.
Recursos técnicos
Airflow
- Airflow 101: Building Your First Workflow
https://airflow.apache.org/docs/apache-airflow/stable/tutorial/fundamentals.html - Airflow 101 Learning Path
https://academy.astronomer.io/path/airflow-101 - DAG writing best practices in Apache Airflow
https://www.astronomer.io/docs/learn/dag-best-practices
AWS Glue y Spark
- Learning Spark - Data Engineering Zoomcamp
https://github.com/DataTalksClub/data-engineering-zoomcamp/tree/main/05-batch - Apache Spark - The Ultimate Guide
https://www.youtube.com/watch?v=FNJze2Ea780 - AWS Glue Tutorial for Beginners
https://youtu.be/ZvJSaioPYyo?si=O_uerpwPPaaGtHfj
Athena y particionamiento
- What is partitioning?
https://docs.aws.amazon.com/athena/latest/ug/ctas-partitioning-and-bucketing-what-is-partitioning.html - Top 10 Performance Tuning Tips for Amazon Athena
https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/
Contenido de la lección bloqueado
Your session expired. Please sign in again to continue.
Iniciar sesión