Cree una canalización de servicios de ETL para cargar datos de forma incremental desde Amazon S3 a Amazon Redshift mediante AWS Glue - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree una canalización de servicios de ETL para cargar datos de forma incremental desde Amazon S3 a Amazon Redshift mediante AWS Glue

Creado por Rohan Jamadagni (AWS) y Arunabha Datta (AWS)

Resumen

Este patrón proporciona orientación sobre cómo configurar Amazon Simple Storage Service (Amazon S3) para obtener un rendimiento óptimo del lago de datos y, a continuación, cargar los cambios incrementales de datos de Amazon S3 en Amazon Redshift mediante AWS Glue, realizando operaciones de extracción, transformación y carga (ETL). 

Los archivos de origen de Amazon S3 pueden tener distintos formatos, incluidos valores separados por comas (CSV), archivos XML y JSON. Este patrón describe cómo puede utilizar AWS Glue para convertir los archivos de origen en un formato optimizado para los costos y el rendimiento, como Apache Parquet. Puede consultar los archivos de Parquet directamente desde Amazon Athena y Amazon Redshift Spectrum. También puede cargar archivos de Parquet en Amazon Redshift, agregarlos y compartir los datos agregados con los consumidores o visualizar los datos mediante Amazon. QuickSight

Requisitos previos y limitaciones

Requisitos previos

  • Una cuenta de AWS activa.

  • Un bucket de origen de S3 que tenga los privilegios adecuados y que contenga archivos CSV, XML o JSON.

Supuestos

  • Los archivos de origen CSV, XML o JSON ya están cargados en Amazon S3 y se puede acceder a ellos desde la cuenta en la que están configurados AWS Glue y Amazon Redshift.

  • Se siguen las prácticas recomendadas para cargar los archivos, dividirlos, comprimirlos y utilizar un manifiesto, tal como se describe en la documentación de Amazon Redshift.

  • La estructura de los archivos de origen permanece inalterada.

  • El sistema de origen puede incorporar datos en Amazon S3 siguiendo la estructura de carpetas definida en Amazon S3.

  • El clúster de Amazon Redshift abarca una sola zona de disponibilidad. (Esta arquitectura es adecuada porque AWS Lambda, AWS Glue y Amazon Athena están sin servidor). Para una alta disponibilidad, se toman instantáneas de los clústeres con una frecuencia regular.

Limitaciones

  • Los formatos de archivo se limitan a los que actualmente admite AWS Glue.

  • No se admite la generación de informes posteriores en tiempo real.

Arquitectura

Pila de tecnología de origen

  • Bucket de S3 con archivos CSV, XML o JSON

Pila de tecnología de destino

  • Lago de datos de S3 (con almacenamiento de archivos Parquet particionado)

  • Amazon Redshift

Arquitectura de destino

Arquitectura para cargar cambios incrementales de Amazon S3 a Amazon Redshift mediante AWS Glue.

Flujo de datos

Flujo de datos para cargar cambios incrementales de Amazon S3 a Amazon Redshift mediante AWS Glue.

Herramientas

  • Amazon S3: Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos altamente escalable. Amazon S3 puede utilizarse para una amplia gama de soluciones de almacenamiento, incluidos sitios web, aplicaciones móviles, copias de seguridad y lagos de datos.

  • AWS Lambda: AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. AWS Lambda es un servicio basado en eventos; puede configurar el código para que se inicie automáticamente desde otros servicios de AWS.

  • Amazon Redshift: Amazon Redshift es un servicio de almacenamiento de datos totalmente administrado de varios petabytes. Con Amazon Redshift, puede consultar petabytes de datos estructurados y semiestructurados en su almacenamiento de datos y su lago de datos mediante SQL estándar.

  • AWS Glue: AWS Glue es un servicio ETL totalmente gestionado que facilita la preparación y la carga de datos para su análisis. AWS Glue descubre sus datos y almacena los metadatos asociados (por ejemplo, definiciones de tablas y esquemas) en el catálogo de datos de AWS Glue. Sus datos catalogados se pueden buscar, consultar y están disponibles para ETL inmediatamente.

  • AWS Secrets Manager: AWS Secrets Manager facilita la protección y la administración centralizada de los secretos necesarios para el acceso a aplicaciones o servicios. El servicio almacena credenciales de bases de datos, claves de API y otros datos confidenciales y elimina la necesidad de codificar de forma rígida la información confidencial en formato de texto sin formato. Secrets Manager también ofrece rotación de claves para satisfacer las necesidades de seguridad y cumplimiento. Incorpora una integración para Amazon Redshift, Amazon Relational Database Service (Amazon RDS) y Amazon DocumentDB. Puede almacenar y gestionar los secretos de forma centralizada mediante la consola Secrets Manager, la interfaz de línea de comandos (CLI) o la API Secrets Manager y. SDKs

  • Amazon Athena : Amazon Athena es un servicio de consultas interactivo que facilita el análisis de datos que están almacenados en Amazon S3. Athena no tiene servidor y está integrada con AWS Glue, por lo que puede consultar directamente los datos catalogados con AWS Glue. Athena se escala con elasticidad para ofrecer un rendimiento de consultas interactivas.

Epics

TareaDescripciónHabilidades requeridas

Analice los sistemas de origen para determinar la estructura y los atributos de los datos.

Realice esta tarea para cada origen de datos que contribuya al lago de datos de Amazon S3.

Ingeniero de datos

Defina la estrategia de partición y acceso.

Esta estrategia debe basarse en la frecuencia de las capturas de datos, el procesamiento delta y las necesidades de consumo. Asegúrese de que los buckets de S3 no estén abiertos al público y de que el acceso esté controlado únicamente por políticas específicas basadas en los roles de servicio. Para obtener más información, consulte la documentación de Amazon S3.

Ingeniero de datos

Cree buckets de S3 independientes para cada tipo de origen de datos y un bucket de S3 independiente por origen para los datos procesados (Parquet).

Cree un bucket independiente para cada origen y, a continuación, cree una estructura de carpetas que se base en la frecuencia de ingesta de datos del sistema de origen; por ejemplo, s3://source-system-name/date/hour. Para los archivos procesados (convertidos al formato Parquet), cree una estructura similar; por ejemplo, s3://source-processed-bucket/date/hour. Para más información sobre cómo crear buckets de S3, consulte la documentación de Amazon S3.

Ingeniero de datos
TareaDescripciónHabilidades requeridas

Lance el clúster de Amazon Redshift con los grupos de parámetros y la estrategia de mantenimiento y copia de seguridad adecuados.

Utilice el secreto de la base de datos de Secrets Manager como credenciales de usuario administrador al crear el clúster de Amazon Redshift. Para obtener información sobre la creación y el tamaño de un clúster de Amazon Redshift, consulte la documentación de Amazon Redshift y el documento técnico sobre el tamaño del almacenamiento de datos en la nube.

Ingeniero de datos

Cree y asocie un rol de servicio de IAM al clúster de Amazon Redshift.

El rol de servicio AWS Identity and Access Management (IAM) garantiza el acceso a Secrets Manager y a los buckets de S3 de origen. Para obtener más información, consulte la documentación de AWS sobre la autorización y la adición de un rol.

Ingeniero de datos

Crear el esquema de la base de datos.

Siga las prácticas recomendadas de Amazon Redshift para el diseño de tablas. Según el caso de uso, elija las claves de clasificación y distribución adecuadas y la mejor codificación de compresión posible. Para conocer las prácticas recomendadas, consulte la documentación de AWS.

Ingeniero de datos

Configure la administración de cargas de trabajo.

Configure las colas de administración de la carga de trabajo (WLM), la aceleración de consultas cortas (SQA) o el escalado simultáneo, según sus necesidades. Para obtener más información, consulte Implementación de la administración de la carga de trabajo en la documentación de Amazon Redshift.

Ingeniero de datos
TareaDescripciónHabilidades requeridas

Cree un nuevo secreto para almacenar las credenciales de inicio de sesión de Amazon Redshift en Secrets Manager.

Este secreto almacena las credenciales del usuario administrador y de los usuarios individuales del servicio de base de datos. Para obtener instrucciones, consulte la documentación de Secretes Manager. Elija Amazon Redshift Cluster como tipo de secreto. Además, en la página de rotación secreta, active la rotación. Esto creará el usuario adecuado en el clúster de Amazon Redshift y cambiará las claves secretas a intervalos definidos.

Ingeniero de datos

Cree una política de IAM para restringir el acceso a Secrets Manager.

Restrinja el acceso a Secrets Manager solo a los administradores de Amazon Redshift y a AWS Glue.

Ingeniero de datos
TareaDescripciónHabilidades requeridas

En el catálogo de datos de AWS Glue, añada una conexión para Amazon Redshift.

Para obtener instrucciones, consulte la documentación de AWS Glue.

Ingeniero de datos

Cree y asocie un rol de servicio de IAM para que AWS Glue pueda acceder a los buckets de Secrets Manager, Amazon Redshift y S3.

Para obtener más información, consulte la documentación de AWS Glue.

Ingeniero de datos

Defina el catálogo de datos de AWS Glue para el origen.

Este paso implica crear una base de datos y las tablas necesarias en el catálogo de datos de AWS Glue. Puede utilizar un rastreador para catalogar las tablas de la base de datos de AWS Glue o definirlas como tablas externas de Amazon Athena. También puede acceder a las tablas externas definidas en Athena a través del catálogo de datos de AWS Glue. Consulte la documentación de AWS para obtener más información sobre la definición del catálogo de datos y la creación de una tabla externa en Athena.

Ingeniero de datos

Cree un trabajo de AWS Glue para procesar los datos de origen.

El trabajo de AWS Glue puede consistir en un shell de Python o en PySpark estandarizar, deduplicar y limpiar los archivos de datos de origen. Para optimizar el rendimiento y evitar tener que consultar todo el bucket de código fuente de S3, particione el bucket de S3 por fecha, desglosado por año, mes, día y hora como predicado desplegable para el trabajo de AWS Glue. Para obtener más información, consulte la documentación de AWS Glue. Cargue los datos procesados y transformados en las particiones del bucket de S3 procesadas en formato Parquet. Puede consultar los archivos de Parquet en Athena.

Ingeniero de datos

Cree un trabajo de AWS Glue para cargar datos en Amazon Redshift.

El trabajo de AWS Glue puede consistir en un shell de Python o PySpark cargar los datos alterándolos y, a continuación, realizar una actualización completa. Para obtener más información, consulte la documentación de AWS Glue y la sección de información adicional.

Ingeniero de datos

(Opcional) Programe los trabajos de AWS Glue mediante activadores según sea necesario.

La carga de datos incremental se debe principalmente a un evento de Amazon S3 que hace que una función de AWS Lambda llame a la tarea de AWS Glue. Utilice la programación basada en activadores de AWS Glue para cualquier carga de datos que exija una programación basada en el tiempo en lugar de en los eventos.

Ingeniero de datos
TareaDescripciónHabilidades requeridas

Cree y adjunte un rol vinculado a un servicio de IAM para que AWS Lambda pueda acceder a los buckets de S3 y al trabajo de AWS Glue.

Cree un rol vinculado a un servicio de IAM para AWS Lambda con una política para leer los objetos y buckets de Amazon S3 y una política para acceder a la API de AWS Glue para iniciar un trabajo de AWS Glue. Para obtener más información, consulte el Centro de conocimientos.

Ingeniero de datos

Cree una función de Lambda para ejecutar el trabajo de AWS Glue en función del evento Amazon S3 definido.

La función de Lambda debe iniciarse con la creación del archivo de manifiesto de Amazon S3. La función Lambda debe pasar la ubicación de la carpeta de Amazon S3 (por ejemplo, source_bucket/year/month/date/hour) al trabajo de AWS Glue como parámetro. El trabajo de AWS Glue utilizará este parámetro como predicado desplegable para optimizar el acceso a los archivos y el rendimiento del procesamiento de los trabajos. Para obtener más información, consulte la documentación de AWS Glue.

Ingeniero de datos

Cree un evento de objeto PUT de Amazon S3 para detectar la creación de objetos y llame a la función de Lambda correspondiente.

El evento de objeto PUT de Amazon S3 debe iniciarse solo con la creación del archivo de manifiesto. El archivo de manifiesto controla la función de Lambda y la simultaneidad de las tareas de AWS Glue, y procesa la carga como un lote en lugar de procesar los archivos individuales que llegan a una partición específica del bucket de origen de S3. Para más información, consulte la documentación de Lambda.

Ingeniero de datos

Recursos relacionados

Información adicional

Enfoque detallado para una actualización automática y completa

Upsert: se trata de conjuntos de datos que requieren un agrupado histórico, según el caso de uso empresarial. Siga uno de los enfoques descritos en Actualización e inserción de datos nuevos (documentación de Amazon Redshift) en función de las necesidades de su empresa.

Actualización completa: se trata de conjuntos de datos pequeños que no necesitan agrupados históricos. Siga uno de estos enfoques:

  1. Trunque la tabla de Amazon Redshift.

  2. Cargue la partición actual desde el área de montaje

o bien:

  1. Cree una tabla temporal con datos de partición actuales.

  2. Elimine la tabla de destino de Amazon Redshift.

  3. Cambie el nombre de la tabla temporal a tabla de destino.