Blog de Amazon Web Services (AWS)
Comparando Servicios de ETL para extracción, transformación y carga de datos en AWS
Por Cristian Camilo Castellanos, Arquitecto de Soluciones, WWPS LCC,
Gabriel Gasca Torres, Arquitecto de Soluciones, WWPS LCC
El auge de la analítica como herramienta para extraer valor de los datos por parte de las organizaciones, ha generado una creciente demanda por servicios de extracción, transformación y carga (ETL) como parte fundamental de dentro de este tipo de proyectos. La integración, transformación y calidad de datos de datos hacen parte del procesamiento para obtener información valiosa, mediante las tecnologías de análisis, aprendizaje automático, e inteligencia artificial entre otros. Algunas estadísticas de industria señalan que los analistas, tomadores de decisiones, y científicos de datos invierten de 60% a 80% de su tiempo en la preparación de los datos. Contar con las herramientas y servicios de ETL adecuados que permitan acelerar y automatizar este proceso es crítico para proveer agilidad a los ingenieros y científicos de datos de manera que permita enfocar su tiempo en tareas de mayor valor para la organización.
En este contexto, AWS ofrece un conjunto de servicios para implementar soluciones para realizar el procesamiento de los datos de acuerdo a las distintas necesidades y requerimientos: “una herramienta adecuada para el trabado adecuado”. Arquitectos, ingenieros y científicos de datos necesitan evaluar y decidir sobre los diferentes servicios y funcionalidades al momento de implementar un proyecto de ETL de tal manera que se seleccionen los servicios y capacidades que cumplan con una arquitectura de analítica bien diseñada. Los factores que pueden guiar estas decisiones van desde las características de las fuentes de datos (estructura, volumen, velocidad de generación), tareas de transformación (agregaciones, imputación, aprendizaje automático, etc.), integración con otros servicios, aprovisionamiento de infraestructura, lenguajes soportados, modelo de costos y cumplimiento de regulaciones entre otros. Esta evaluación multifactorial no es trivial, más aún cuando no se tienen claras las características para cada uno de los servicios, sus ventajas y desventajas frente al caso de uso a implementar.
El objetivo de este blog es proporcionar una guía para entender las principales características de los servicios de ETL y los casos de uso típicos en los que cada uno puede ser recomendado. Es importante resaltar el término de servicios especializados y procesamiento periódico, dado que otros casos de uso como orquestación de servicios, sincronización de datos en ambientes de nube híbridos, migraciones o intercambio de datos sin operaciones de transformación o sin el propósito final de analítica, están fuera del alcance de este blog. Por tanto, los servicios que aplican para esos casos de uso no son considerados en esta comparativa.
Comparación de Servicios de ETL en AWS
Esta sección presenta una descripción general de cada servicio resaltando las características que se evalúan en la comparación, y casos de uso de ejemplo que se ajustan a las características de cada servicio. Finalmente, se incluye una tabla de resumen que caracteriza cada servicio en términos de datos fuente, datos destino, funciones integradas, plantillas, lenguajes soportados, escalabilidad, modelo de procesamiento y costeo para facilitar su comparación.
AWS Glue es un servicio de ETL completamente sin servidoradministrado y de pago por uso que automatiza las tareas de preparación de datos para el análisis. AWS Glue descubre y clasifica los datos automáticamente mediante el catálogo de datos de AWS Glue, recomienda y genera código ETL para transformar sus datos de origen en esquemas de destino. También ejecuta trabajos complejos de ETL en un entorno Apache Spark escalable y completamente administrado para cargar los datos a su destino. Este servicio soporta tanto la escritura de código en Spark (Python o Scala), Python Shell. Adicionalmente, cuenta con la funcionalidad de diseño visual de ETL con AWS Glue Studio que incluye un conjunto de funciones incorporadas y genera automáticamente el código correspondiente.
- Creación, ejecución y supervisión de trabajos de ETL a gran escala.
- Creación, ejecución y supervisión de trabajos de ETL para procesamiento en micro-lotes.
- Flujos de ETL basados en eventos.
- Transformaciones avanzadas basadas en ML como deduplicación de datos.
- Administración de un catálogo unificado de datos.
Figura 1: Ejemplo de visualización de un trabajo de ETL en AWS Glue Studio.
AWS Glue DataBrew es una herramienta de preparación de datos visual que facilita a los analistas y científicos de datos la preparación de datos con una interfaz visual interactiva “drag and drop” sin la necesidad de escribir código. AWS Glue DataBrew cuenta con mas de 250 transformaciones integradas con las que se pueden visualizar, limpiar y normalizar fácilmente terabytes e incluso petabytes de datos directamente desde su lago de datos, bodegas de datos y bases de datos. Este servicio se ajusta principalmente a procesos ETL que involucran análisis de calidad de datos, linaje de datos, aplicación de técnicas avanzadas de procesamiento de texto utilizando una interfaz visual que no requiere escribir código:
- Perfilamiento de datos y análisis visual sobre la calidad de los datos.
- Limpieza, filtrado, normalización, imputación de datos de manera visual.
- Mapeo de linaje de datos.
- Transformación de texto utilizando técnicas de procesamiento de lenguaje natural (NLP).
Figura 2: Ejemplo de visualización de un perfilamiento de datos en AWS Glue DataBrew.
Figura 3: Ejemplo de visualización de linaje de datos en AWS Glue DataBrew.
Amazon ElasticMapReduce (Amazon EMR) es la plataforma de big data destinada al procesamiento de grandes volúmenes de datos mediante el uso de herramientas de código abierto. Dentro de los frameworks orientados al desarrollo de ETL que incluye EMR se encuentran Apache Hadoop, Hive, Pig, Spark, y Flink. Amazon EMR facilita la instalación, el funcionamiento y el escalado de los entornos de big data al automatizar las tareas que toman mucho tiempo, como el aprovisionamiento de la capacidad y el ajuste de clústeres. Amazon EMR se puede utilizar para realizar de forma rápida y rentable cargas de trabajo de transformación de datos (ETL), como ordenar, agregar y unir conjuntos de datos de gran tamaño. Amazon EMR proporciona acceso directo a su entorno de Hadoop, lo que le brinda acceso de nivel inferior y mayor flexibilidad en el uso de herramientas del ecosistema Hadoop, a diferencia de AWS Glue que provee un entorno Apache Spark sin servidor. Amazon EMR proporciona varias formas de obtener datos en un clúster. La forma más común es cargar los datos a Amazon S3 y utilizar las funciones integradas de Amazon EMRFS para leer y procesar los datos en su clúster. También es posible utilizar frameworks para interactuar con datos almacenados en Amazon S3, Hadoop HDFS, y RDBMS.
Apache Hadoop permite la ejecución de programas de MapReduce para procesar cargas de trabajo con marcos que dividen los trabajos en porciones más pequeñas que se pueden distribuir en nodos de su clúster de Amazon EMR.
Apache Hive es un paquete de análisis y almacenamiento de datos de código abierto que se ejecuta sobre Hadoop utilizando Hive QL, un lenguaje basado en SQL que permite que los usuarios estructuren, resuman y consulten datos. Amazon EMR ha efectuado numerosas mejoras en Hive, incluida la integración directa con Amazon DynamoDB y Amazon S3.
Apache Pig es una biblioteca Apache de código abierto que se ejecuta encima de Hadoop, proporcionando un lenguaje de scripting que puedes usar para transformar grandes conjuntos de datos sin tener que escribir código complejo en un lenguaje informático de nivel inferior como Java.
Apache Spark es un marco de procesamiento distribuido y modelo de programación que te ayuda a hacer aprendizaje automático, procesamiento de streaming o análisis de gráficos usando clústeres de Amazon EMR.
Apache Flink es un motor de flujo de datos de streaming que puedes usar para ejecutar el procesamiento de streaming en tiempo real en fuentes de datos de alto desempeño.
Los casos de uso que mejor se ajustan a este servicio son:
- Aprovisionamiento de clústeres de Big Data para implementar tareas de ETL en entornos como Apache Hadoop, Hive, Pig, Spark, y Flink.
- Migración de código de ETL implementado en Apache Hadoop, Spark, Pig, y Flink a un entorno de clústeres administrado.
Figura 4: Integraciones de Trabajos de ETL con Apache Spark en EMR. Adaptado de https://thinkwithwp.com/es/blogs/big-data/using-spark-sql-for-etl/
Amazon SageMaker Data Wrangler (Data Wrangler) es una característica de Amazon SageMaker Studio que proporciona una solución integral para importar, preparar, transformar, caracterizar y analizar datos. Puede integrar un flujo de datos de Data Wrangler en los flujos de trabajo de aprendizaje automático (ML) para simplificar y optimizar el pre-procesamiento de datos y la ingeniería de características mediante poca o ninguna codificación. También puede agregar sus propios scripts y transformaciones de Python para personalizar un flujo de trabajo de preparación de datos de Data Wrangler. Este servicio se recomienda cuando se necesita implementar transformaciones, análisis, o extracción de características como parte de un flujo por lotes de aprendizaje automático que no requiera escribir código.
- Perfilamiento y análisis visual sobre la calidad de los datos previo a una tarea de ML.
- Preparación de datos para procesos de ML.
- Extracción de características para tareas de ML.
Figura 5: Ejemplo de visualización de un flujo de datos en Amazon SageMaker Data Wrangler.
Amazon AppFlow es un servicio de integración completamente administrado que permite, con unos pocos clics y de manera segura, transmitir datos entre aplicaciones de software como servicio (SaaS), como Salesforce, Marketo, Slack y ServiceNow, entre otros y servicios de AWS, como Amazon S3 y Amazon Redshift. Con AppFlow, puede ejecutar flujos de datos en casi cualquier escala y en la frecuencia que elija, de manera programada, en respuesta a eventos del negocio, o bajo demanda. Puede configurar capacidades de transformación de datos, como filtrado y validación, para generar datos enriquecidos y listos para usar como parte del flujo, sin pasos adicionales y con frecuencia de minutos, horas o días. Ofrece menos opciones de transformación comparado con los otros servicios, pero es ideal si requiere integrar servicios SaaS compatibles sin necesidad de codificación. Los casos casos de uso que mejor se ajustan a este servicio son:
- Almacenamiento o sincronización de datos operacionales de servicios externos tipo SaaS.
- Flujos de trabajo y análisis basado en eventos generados por servicios externos tipo SaaS.
- Enriquecimiento de datos generados por servicios externos tipo SaaS.
- Intercambio de datos orientado a APIs entre aplicaciones SaaS y servicios AWS
Figura 6: Ejemplo de un mapeo de datos desde Slack a S3 en Amazon AppFlow.
Amazon Kinesis Analytics ofrece la manera más sencilla de transformar y analizar datos de streaming en tiempo real utilizando Apache Flink, Apache Beam, o ANSI SQL con algunas extensiones al SQL estándar. Amazon Kinesis Data Analytics se ocupa de todo lo necesario para ejecutar sus aplicaciones de streaming de forma continua y ajusta la escala automáticamente para adaptarse al volumen y rendimiento de los datos de entrada. Este servicio provee soporte para librerías de código abierto Apache Flink, Apache Beam, AWS SDK especializadas para diferentes casos de uso, incluido ETL de transmisión y análisis en tiempo real. Algunos casos de uso típicos incluyen:
- Procesos ETL simples sobre streaming de datos.
- Consultas sobre streaming en tiempo real.
- Monitorización del dispositivo en tiempo real
- Procesamiento de eventos con estado.
Figura 7: Ejemplo de definición de un stream de datos usando SQL en Amazon Kinesis Analytics.
AWS IoT Analytics es un servicio completamente administrado que facilita la ejecución e instrumentación de análisis sofisticados de enormes volúmenes de datos de dispositivos IoT (internet de las cosas) que incluyen marcas temporales. AWS IoT Analytics automatiza cada uno de los pasos para analizar, filtrar, transformar y enriquecer datos de IoT utilizando actividades básicas de transformación incluyendo operaciones de ventanas de tiempo para guardarlos en un almacén de datos de series temporales para su análisis. Puede configurar el servicio para recopilar solo los datos que necesita de sus dispositivos, aplicar transformaciones matemáticas a los datos para procesarlos, y enriquecerlos con metadatos específicos del dispositivo. Este servicio esta orientado principalmente a análisis de datos de dispositivos IoT que requieren transformación, integración y análisis de telemetría completamente administrado en tiempo casi real con resolución de minutos utilizando SQL y funciones predefinidas. Algunos casos de uso típicos para este servicio son:
- Comprender las características de desempeño del dispositivo a largo plazo.
- Informe comercial y análisis ad hoc de los datos de la IoT.
- Mantenimiento predictivo de la flota de dispositivos de IoT.
Figura 8: Ejemplo de definición de actividades de transformación en un pipeline de AWS IoT Analytics.
Servicio |
Datos Fuente | Datos Destino | Funciones integradas | Plantillas |
Lenguajes |
Forma de Escalabilidad |
Modelo de Procesam. |
Costeo |
AWS Glue | Amazon Aurora, Amazon RDS, Amazon Redshift, DynamoDB y Amazon S3, MySQL, Oracle, Microsoft SQL Server y PostgreSQL en Amazon EC2. Para Streaming Amazon MSK, Amazon Kinesis Data Streams y Apache Kafka | JSON, CSV, PARQUET, ORC, TXT, RDS, RedShift | Descubrir esquemas, Imputar, Agregar, Integrar, Limpiar, Normalizar, Transformar | Si | Código en Scala , Python, o Interfaz Visual |
Sin servidor (Serverless) | Batch, Streaming | Capacidad de procesamiento utilizada por unidad de tiempo |
AWS Glue DataBrew | Amazon S3, AWS Glue Data Catalog, Archivos CSV, TSV, JSON, Apache Parquet y hojas de Excel. | Archivos CSV, JSON, Apache Parquet, Apache Avro, Apache ORC y XML. | 250+ transformaciones integradas para perfilar, limpiar, normalizar, mapear linaje de datos, automatizar, y deduplicar | No | Interfaz Visual | Sin servidor (Serverless) | Batch | Sesiones interactivas y capacidad de procesamiento utilizada por unidad de tiempo |
Amazon SageMaker Data Wrangler | Amazon S3, Amazon Athena, Amazon Redshift, AWS Lake Formation, y Amazon SageMaker Feature Store | Sagemaker | 300+ transformaciones integradas para importar flujo de datos transformar. analizar y exportar |
Si | Visual, puede agregar sus propios scripts y transformaciones de Python y exportar el flujo de Data Wrangler al código Python | Ajuste del tipo de instancia | Batch | Capacidad de procesamiento aprovisionada por unidad de tiempo |
Amazon AppFlow | Fuentes de datos basados en API Amazon Redshift Amazon EventBridge Amazon Honeycode Amazon Lookout for Metrics Amplitude Datadog Dynatrace Google Analytics Infor Nexus Marketo Salesforce Salesforce Pardot ServiceNow Singular Slack Snowflake Trend Micro Upsolver Veeva Zendesk |
Amazon S3, Amazon Redshift, Salesforce y Snowflake | Transformaciones básicas de datos, como filtrar y validar, para generar datos enriquecidos y listos para usar como parte del flujo | No | Interfaz Visual | Sin servidor (Serverless) | Batch, Microbatch | Flujos ejecutados y volumen de datos procesados |
Amazon EMR–Apache Hadoop | Amazon S3, Hadoop, HDFS, y RDBMS.
|
Amazon S3, Hadoop, HDFS, y RDBMS. | Transformación de datos y consulta. | No | Código Java | Instancias administradas en EC2 o Fargate Sin servidor | Batch | Capacidad de procesamiento aprovisionada por unidad de tiempo |
Amazon EMR–Apache Hive | No | HiveQL | Batch | |||||
Amazon EMR–Apache Pig | Amazon S3, Hadoop, HDFS, y RDBMS.
|
Amazon S3, Hadoop, HDFS, y RDBMS. | Transformaciones básicas de datos, como filtrar, imputar, integrar y validar. | No | Código Pig Latin | Instancias administradas en EC2 o Fargate Sin servidor | Batch | Capacidad de procesamiento aprovisionada por unidad de tiempo |
Amazon EMR–Apache Spark | Amazon S3, Hadoop, HDFS, RDBMS, Amazon Kinesis, Apache Kafka. | Amazon S3, Hadoop, HDFS, RDBMS, Amazon Kinesis, Apache Kafka. | Transformaciones básicas de datos, como filtrar, agregar, imputar, integrar y validar, y ventanas de tiempo | No | Código Java, Scala, Python, R | Batch, Microbatch | ||
Amazon EMR–Apache Flink | Amazon S3, Hadoop, HDFS, Amazon Kinesis, Apache Kafka, Cassandra, Elasticsearch, Twitter Streaming API | Amazon S3, Hadoop, HDFS, Amazon Kinesis, Apache Kafka, Cassandra, Elasticsearch | Transformaciones básicas de datos, como filtrar, agregar, imputar, integrar, validar, y ventanas de tiempo | No | Código Java, Scala, Python | Streaming | ||
Amazon Kinesis Data Analytics | Amazon Kinesis Data Streams, Amazon Kinesis Firehose, Puede usar las bibliotecas de Amazon Kinesis Data Analytics para integrar con otros servicios |
Kinesis Data Stream, Kinesis Firehose (Amazon S3, Amazon Redshift, Amazon Elasticsearch Service), AWS Lambda | Funciones SQL integradas para filtrar, agregar, transformar datos, aplicar ventanas de tiempo, funciones para análisis estadístico y de ML | Si, Plantillas SQL | SQL, Código Java, Scala (Apache Flink) | Sin servidor (Serverless) | Streaming | Capacidad de procesamiento utilizada por unidad de tiempo |
AWS IoT Analytics | MQTT Topic, AWS IoT Core | AWS IoT Events, Amazon S3, Almacén de series de temporales, Amazon QuickSight | Funciones básicas para filtrar, trasformar, integrar, limpiar, agregar, reprocesar, y usar ventana de tiempo diferencial | No | SQL, y Asistente con actividades de transformación incorporadas | Sin servidor (Serverless) | Microbatch | Volumen de datos procesados |
Seleccionando el Servicio de ETL acorde al caso de uso
Una vez tenemos claras las características de los diferentes servicios de ETL y los requerimientos propios de nuestro proyecto de ETL, podemos entrar a evaluar y seleccionar el servicio que más se ajusta nuestros requerimientos. Para facilitar el proceso de selección, proponemos la guía presentada en la Figura 8 como un árbol de decisión que permite ir paso a paso evaluando las condiciones de nuestro ETL hasta seleccionar el servicio recomendado. La primera condición es validar si desde el punto de vista operativo o de modelo de costos, se busca un servicio sin servidor, que reduce la carga operativa de mantenimiento de infraestructura y utiliza un modelo de costeo por uso de servicio y no por infraestructura aprovisionada.
Otra característica clave es si el proceso de ETL requiere procesamiento en streaming o batch, y si se requiere en tiempo real, dado que esto determina en gran medida la selección del servicio. Finalmente, otros elementos como el tipo de funciones integradas, la integración con aplicaciones SaaS o dispositivos de IoT permiten refinar la escogencia del servicio de ETL. La compatibilidad con datos de origen y destino también pueden limitar la selección del servicio, para lo cual la tabla anterior ofrece la compatibilidad predefinida de datos por servicio que también podría extenderse a partir de la integración o construcción de conectores adicionales.
* Si requiere funciones avanzadas ya integradas como perfilamiento de datos, linaje de datos, de-duplicación, análisis de sesgo, etc.
** Si el proceso de ETL es parte de un flujo de aprendizaje de máquina.
Figura 9: Guía para seleccionar un servicio de ETL.
Conclusiones
En este blog caracterizamos los servicios de ETL en términos de factores que permiten evaluar su selección a partir de las necesidades de un caso de uso. Adicionalmente presentamos una guía que facilita la evaluación y selección del servicio a partir de las características definidas. Al final, esperamos brindar al lector elementos objetivos para apoyar la toma de decisiones cuando arquitecta y diseña una solución de ETL en AWS de manera que se pueda alinear con los requerimientos puntuales de su caso de uso.
Sobre los autores
Cristian Castellanos es Arquitecto de Soluciones en Amazon Web Services para el Sector Público. Cristian ha ayudado a múltiples NPOs, instituciones educativas, y de gobierno en la adopción de nuevas tecnologías e implementación de soluciones de analítica.
Gabriel Gasca Torres es Solutions Architect en AWS en México.
Revisores Técnicos
Gabriel Paredes es Arquitecto de Soluciones en Amazon Web Services para Sector Público. Gabriel ayuda a múltiples instituciones de educación en Latinoamérica en la adopción tecnológica y mejora de sus servicios estudiantiles.