Construyendo un ETL en AWS Glue

Milton Sanabria
5 min readJun 16, 2020

--

AWS Glue es un servicio de extracción, transformación y carga (ETL) completamente administrado, nos ayuda a preparar y cargar los datos para su posterior análisis. Este servicio se puede utilizar para catalogar datos, limpiarlos, enriquecerlos y moverlos de manera confiable entre diferentes almacenes de datos. Podemos crear y ejecutar trabajos de ETL con tan solo unos clics. Si quieres saber más sobre AWS Glue visita este artículo.

En este artículo explicaré cómo podemos usar AWS Glue para construir un ETL usando Python y Spark.

ETL en AWS Glue

Construiremos un ETL sobre AWS Glue usando PySpark, para ello seguiremos una serie de pasos que se detallaran más abajo. Como datos de entrada usaremos archivos en formato JSON que contienen información sobre legisladores de los Estados Unidos. Los archivos JSON al igual que el script que usaremos podrán ser encontrados en mi repositorio de GitHub.

1) Cargando nuestros datos de entrada

Vamos al servicio de S3 y creamos un bucket llamado demo-etl y dentro de este el folder data-raw, en este folder cargaremos nuestros datos de entrada.

2) Creando un rol IAM para Glue

Nos dirigimos al buscador de la consola de AWS y entramos al servicio de IAM, vamos a la sección de Policies y creamos una nueva política dando clic en Create policy, aquí construiremos una política especifica que nos permita configurar los accesos que queremos sobre el bucket de nuestros datos. Escogemos la opción JSON y editamos el Statement de la siguiente manera:

Asignamos un nombre y le damos crear, para este caso será policy-glue-demo. De esta manera estaremos creando una política con permisos para leer, editar y eliminar archivos en cualquier folder de nuestro bucket.

Vamos a la sección de Roles y le damos clic en Create role, seleccionamos el servicio de Glue y luego Next: Permissions. Seleccionamos la política de AWSGlueServiceRole y la que creamos previamente.

En la siguiente página podemos omitir el tag. Finalmente, le asignamos un nombre y creamos el rol, para este caso el nombre será AWSGlueServiceRole-demo-etl.

3) Catalogando los datos

Estando dentro de Glue, configuramos un crawler para traernos la metadata de los archivos de entrada y dejarlos disponibles en el catálogo de datos. Sigue los siguientes pasos para agregar un crawler:

  • En el menú de la izquierda le damos Crawlers y luego Add crawler. Le asignamos el nombre crawler-demo. Seleccionamos Data stores y en la siguiente ventana le proporcionamos el path de S3 donde están nuestros datos:
  • Asignamos el rol que creamos en el paso 2:
  • Creamos la base de datos donde se almacenara la metadata de los archivos de entrada:
  • Finalmente revisamos que todo esté bien y le damos Finish
  • Ya creado nuestro crawler lo seleccionamos y le damos Run crawler, esto podrá tardar unos minutos. Al terminar ya deberíamos tener nuestros datos de entrada como tablas en la base de datos que creamos previamente:

4) Agregando un job

Ya teniendo nuestros datos en el catálogo de Glue, pasamos a agregar un job para construir nuestro ETL.

  • Nuevamente, en el menú de la izquierda buscamos la opción de Jobs y le damos Add job. Glue puede autogenerar un script de Python o PySpark. Para nuestro caso crearemos un nuevo script.
  • Dejaremos el resto de pasos con la configuración por defecto. Al final veremos una ventana que nos permitirá agregar el script que queremos ejecutar:
  • El script a ejecutar lo podrás encontrar en mi repositorio de GitHub, o puedes simplemente copiar y pegar el siguiente código:
  • Nuestro ETL lo que hará es tomar la información de las tablas que cargamos al catálogo y aplicar una serie de transformaciones como borrado de campos, renombres y unos joins. Al final guardará en formato parquet la tabla transformada, dejando así el archivo de salida en el bucket de S3 que hemos especificado.
  • Guardamos y le damos Run Job, esto podrá tomar unos minutos. Si la ejecución es exitosa deberíamos tener nuestro archivo parquet en el bucket de salida y así habremos construido con éxito nuestro ETL.

AWS Glue nos permite procesar datos de diferentes fuentes y formatos, incluyendo información en streaming con AWS Kinesis o Apache Kafka. ¡anímate a seguir jugando con este servicio!

--

--