Logotipo de Zephyrnet

Cree una plataforma de datos moderna utilizando la herramienta de creación de datos (dbt) en la nube de AWS | Servicios web de Amazon

Fecha:

La construcción de una plataforma de datos implica varios enfoques, cada uno con su combinación única de complejidades y soluciones. Una plataforma de datos moderna implica mantener datos en múltiples capas, apuntando a diversas capacidades de plataforma como alto rendimiento, facilidad de desarrollo, rentabilidad y características de DataOps como CI/CD, linaje y pruebas unitarias. En esta publicación, profundizamos en un estudio de caso para un caso de uso minorista, explorando cómo el Herramienta de creación de datos (dbt) se utilizó eficazmente dentro de un entorno de AWS para crear una plataforma de datos moderna, eficiente y de alto rendimiento.

dbt es una herramienta de línea de comandos de código abierto que permite a los analistas e ingenieros de datos transformar los datos en sus almacenes de manera más efectiva. Para ello, ayuda a los equipos a manejar los procesos T en ETL (extracción, transformación y carga). Permite a los usuarios escribir código de transformación de datos, ejecutarlo y probar el resultado, todo dentro del marco que proporciona. dbt le permite escribir sentencias de selección SQL y luego gestiona convertir estas sentencias de selección en tablas o vistas en Desplazamiento al rojo de Amazon.

Caso de uso

El grupo Enterprise Data Analytics de un gran minorista de joyería se embarcó en su viaje a la nube con AWS en 2021. Como parte de su iniciativa de modernización de la nube, buscaban migrar y modernizar su plataforma de datos heredada. El objetivo era reforzar sus capacidades analíticas y mejorar la accesibilidad a los datos, garantizando al mismo tiempo un tiempo de comercialización rápido y una alta calidad de los datos, todo ello con un bajo coste total de propiedad (TCO) y sin necesidad de herramientas o licencias adicionales.

dbt surgió como la elección perfecta para esta transformación dentro de su entorno AWS existente. Esta popular herramienta de código abierto para transformaciones de almacenes de datos venció a otras herramientas ETL por varias razones. El marco basado en SQL de dbt hizo que su aprendizaje fuera sencillo y permitió que el equipo de desarrollo existente ampliara rápidamente su escala. La herramienta también ofrecía características deseables listas para usar, como linaje de datos, documentación y pruebas unitarias. Una ventaja crucial de dbt sobre los procedimientos almacenados fue la separación del código de los datos; a diferencia de los procedimientos almacenados, dbt no almacena el código en la propia base de datos. Esta separación simplifica aún más la gestión de datos y mejora el rendimiento general del sistema.

Exploremos la arquitectura y aprendamos cómo crear este caso de uso utilizando los servicios de la nube de AWS.

Resumen de la solución

La siguiente arquitectura demuestra la canalización de datos construida en dbt para administrar el proceso ETL del almacén de datos de Redshift.

        Figura 1: Plataforma de datos moderna que utiliza AWS Data Services y dbt

Esta arquitectura consta de los siguientes servicios y herramientas clave:

  • Desplazamiento al rojo de Amazon se utilizó como almacén de datos para la plataforma de datos, almacenando y procesando grandes cantidades de datos estructurados y semiestructurados
  • Amazon QuickSight sirvió como herramienta de inteligencia empresarial (BI), lo que permitió al equipo empresarial crear informes analíticos y paneles de control para diversos conocimientos empresariales.
  • Servicio de migración de bases de datos de AWS (AWS DMS) se empleó para realizar la replicación de captura de datos de cambios (CDC) desde varias bases de datos transaccionales de origen.
  • Pegamento AWS se puso a trabajar, cargando archivos desde la ubicación SFTP al Servicio de almacenamiento simple de Amazon (Amazon S3) y posteriormente al esquema de aterrizaje de Redshift
  • AWS Lambda funcionó como un programa cliente, llamando a API de terceros y cargando los datos en tablas de Redshift
  • AWS Fargate, un servicio de gestión de contenedores sin servidor, se utilizó para implementar la aplicación de consumo para colas y temas de origen.
  • Flujos de trabajo administrados por Amazon para Apache Airflow (Amazon MWAA) se utilizó para orquestar diferentes tareas de canalizaciones dbt
  • dbt, una herramienta de código abierto, se empleó para escribir canalizaciones de datos basadas en SQL para datos almacenados en Amazon Redshift, facilitando transformaciones complejas y mejorando las capacidades de modelado de datos.

Echemos un vistazo más de cerca a cada componente y cómo interactúan en la arquitectura general para transformar datos sin procesar en información valiosa.

Fuentes de datos

Como parte de esta plataforma de datos, incorporamos datos de diversas y variadas fuentes de datos, que incluyen:

  • Bases de datos transaccionales – Se trata de bases de datos activas que almacenan datos en tiempo real de diversas aplicaciones. Los datos normalmente abarcan todas las transacciones y operaciones que realiza la empresa.
  • Colas y temas – Las colas y los temas provienen de varias aplicaciones de integración que generan datos en tiempo real. Representan un flujo instantáneo de información que se puede utilizar para análisis y toma de decisiones en tiempo real.
  • API de terceros – Estos proporcionan análisis y datos de encuestas relacionados con sitios web de comercio electrónico. Esto podría incluir detalles como métricas de tráfico, comportamiento del usuario, tasas de conversión, comentarios de los clientes y más.
  • Archivos planos - Otros sistemas suministran datos en forma de archivos planos de diferentes formatos. Estos archivos, almacenados en una ubicación SFTP, pueden contener registros, informes, registros u otros tipos de datos sin procesar que pueden procesarse y analizarse más a fondo.

Ingestión de datos

Los datos de diversas fuentes se agrupan en dos categorías principales: ingesta en tiempo real e ingesta por lotes.

La ingesta en tiempo real utiliza los siguientes servicios:

  • DMS de AWS AWS DMS se utiliza para crear canalizaciones de replicación de CDC a partir de bases de datos OLTP (procesamiento de transacciones en línea). Los datos se cargan en Amazon Redshift casi en tiempo real para garantizar que la información más reciente esté disponible para su análisis. También puedes usar Integración de ETL cero de Amazon Aurora con Amazon Redshift para ingerir datos directamente desde bases de datos OLTP a Amazon Redshift.
  • puerta lejana Fargate se utiliza para implementar aplicaciones de consumo Java que ingieren datos de colas y temas de origen en tiempo real. Este consumo de datos en tiempo real puede ayudar a la empresa a tomar decisiones inmediatas y basadas en datos. También puedes usar Ingestión de streaming de Amazon Redshift para ingerir datos de motores de transmisión como Secuencias de datos de Amazon Kinesis or Streaming administrado por Amazon para Apache Kafka (Amazon MSK) en Amazon Redshift.

La ingesta por lotes utiliza los siguientes servicios:

  • lambda – Lambda se utiliza como cliente para llamar a API de terceros y cargar los datos resultantes en tablas de Redshift. Se ha programado que este proceso se ejecute diariamente, lo que garantiza un lote consistente de datos nuevos para el análisis.
  • Pegamento AWS – AWS Glue se utiliza para cargar archivos en Amazon Redshift a través del lago de datos S3. También puedes utilizar funciones como copia automática desde Amazon S3 (función en vista previa) para ingerir datos de Amazon S3 en Amazon Redshift. Sin embargo, esta publicación se centra más en el procesamiento de datos dentro de Amazon Redshift que en el proceso de carga de datos. La ingesta de datos, ya sea en tiempo real o por lotes, constituye la base de cualquier análisis de datos eficaz, lo que permite a las organizaciones recopilar información de diversas fuentes y utilizarla para tomar decisiones perspicaces.

Almacenamiento de datos con Amazon Redshift

En Amazon Redshift, hemos establecido tres esquemas, cada uno de los cuales actúa como una capa diferente en la arquitectura de datos:

  • Capa de aterrizaje – Aquí es donde llegan inicialmente todos los datos ingeridos por nuestros servicios. Son datos sin procesar y sin procesar directamente de la fuente.
  • Capa de conjunto de datos certificado (CDS) – Esta es la siguiente etapa, donde los datos de la capa de aterrizaje se limpian, normalizan y agregan. Los datos limpios y procesados ​​se almacenan en este esquema de conjunto de datos certificado. Sirve como una fuente confiable y organizada para el análisis de datos posteriores.
  • Capa de mercado de datos (UFDM) fácil de usar: Esta capa final utiliza datos de la capa CDS para crear tablas de data mart. Estos están diseñados específicamente para admitir informes y paneles de BI según los requisitos comerciales. El objetivo de esta capa es presentar los datos de la manera más útil y accesible para los usuarios finales.

Este enfoque en capas para la gestión de datos permite un procesamiento de datos eficiente y organizado, lo que genera conocimientos más precisos y significativos.

Canal de datos

dbt, una herramienta de código abierto, se puede instalar en el entorno de AWS y configurar para funcionar con Amazon MWAA. Almacenamos nuestro código en un depósito S3 y lo organizamos utilizando los gráficos acíclicos dirigidos (DAG) de Airflow. Esta configuración facilita nuestros procesos de transformación de datos en Amazon Redshift después de que los datos se incorporan al esquema de aterrizaje.

Para mantener la modularidad y manejar dominios específicos, creamos proyectos dbt individuales. La naturaleza de los informes de datos (en tiempo real o por lotes) afecta la forma en que definimos nuestra materialización de dbt. Para informes en tiempo real, definimos la materialización como una vista, cargando datos en el esquema de aterrizaje utilizando AWS DMS desde actualizaciones de bases de datos o desde consumidores de temas o colas. Para las canalizaciones por lotes, definimos la materialización como una tabla, lo que permite cargar datos desde varios tipos de fuentes.

En algunos casos, hemos tenido que construir canales de datos que se extienden desde el sistema fuente hasta la capa UFDM. Esto se puede lograr utilizando Airflow DAG, que analizamos más a fondo en la siguiente sección.

Para concluir, vale la pena mencionar que implementamos una página web dbt usando una función Lambda y habilitamos una URL para esta función. Esta página web sirve como centro para la documentación y el linaje de datos, lo que refuerza aún más la transparencia y la comprensión de nuestros procesos de datos.

Orquestación de trabajos ETL

En nuestra canalización de datos, seguimos estos pasos para la orquestación del trabajo:

  1. Establecer un nuevo entorno de Amazon MWAA. Este entorno sirve como eje central para orquestar nuestros canales de datos.
  2. Instale dbt en el nuevo entorno Airflow agregando la siguiente dependencia a su requirements.txt:
    boto3>=1.17.54
    botocore>=1.20.54
    dbt-redshift>=1.3.0
    dbt-postgres>=1.3.0

  3. Desarrollar DAG con tareas específicas que requieran comandos dbt para llevar a cabo las transformaciones necesarias. Este paso implica estructurar nuestros flujos de trabajo de una manera que capture las dependencias entre las tareas y garantice que las tareas se ejecuten en el orden correcto. El siguiente código muestra cómo definir las tareas en el DAG:
    #imports..
    ... #Define the begin_exec tasks
    start = DummyOperator( task_id='begin_exec', dag=dag ) #Define 'verify_dbt_install' task to check if dbt was installed properly
    verify = BashOperator( task_id='verify_dbt_install', dag=dag, bash_command=''' echo "checking dbt version...."; /usr/local/airflow/.local/bin/dbt --version; if [ $? -gt 0 ]; then pip install dbt-redshift>=1.3.0; else echo "dbt already installed"; fi python --version; echo "listing dbt..."; rm -r /tmp/dbt_project_home; cp -R /usr/local/airflow/dags/dbt_project_home /tmp; ls /tmp/dbt_project_home/<your_dbt_project_name>; '''
    ) #Define ‘landing_to_cds_task’ task to copy from landing schema to cds schema
    landing_to_cds_task = BashOperator( task_id='landing_to_cds_task', dag = dag, bash_command=''' /usr/local/airflow/.local/bin/dbt run --project-dir /tmp/dbt_project_home/<your_dbt_project_name> --profiles-dir /tmp/dbt_project_home/ --select <model_folder_name>.*; '''
    ) ...
    #Define data quality check task to test a package, generate docs and copy the docs to required S3 location
    data_quality_check = BashOperator( task_id='data_quality_check', dag=dag, bash_command=''' /usr/local/airflow/.local/bin/dbt test –-select your_package.* /usr/local/airflow/.local/bin/dbt docs generate --project-dir /tmp/dbt_project_home/<your_project_name> --profiles-dir /tmp/dbt_project_home/; aws s3 cp /tmp/dbt_project_home/<your_project_name>/target/ s3://<your_S3_bucket_name>/airflow_home/dags/dbt_project_home/<your_project_name>/target --recursive; '''
    )

  4. Cree DAG que se centren únicamente en la transformación de dbt. Estos DAG manejan el proceso de transformación dentro de nuestros canales de datos, aprovechando el poder de dbt para convertir datos sin procesar en información valiosa.
    #This is how we define the flow start >> verify >> landing_to_cds_task >> cds_to_ufdm_task >> data_quality_check >> end_exec

La siguiente imagen muestra cómo se vería este flujo de trabajo en la interfaz de usuario de Airflow.

  1. Cree DAG con AWS Glue para la ingesta. Estos DAG utilizan AWS Glue para tareas de ingesta de datos. AWS Glue es un servicio ETL totalmente administrado que facilita la preparación y carga de datos para su análisis. Creamos DAG que organizan trabajos de AWS Glue para extraer datos de diversas fuentes, transformarlos y cargarlos en nuestro almacén de datos.
     #Create boto3 client for Glue glue_client = boto3.client('glue', region_name='us-east-1') #Define callback function to start the Glue job using boto3 client def run_glue_ingestion_job(): glue_client.start_job_run(JobName='glue_ingestion_job') #Define the task for glue job for ingestion glue_job_step = PythonOperator( task_id=’glue_task_for_source_to_landing’, python_callable=run_glue_ingestion_job )
    #This is how we define the flow start >> verify >> glue_task_for_source_to_landing >> landing_to_cds_task >> cds_to_ufdm_task >> data_quality_check >> end_exec
    

La siguiente imagen muestra cómo se vería este flujo de trabajo en la interfaz de usuario de Airflow.

  1. Cree DAG con Lambda para la ingestión. Lambda nos permite ejecutar código sin aprovisionar ni administrar servidores. Estos DAG utilizan funciones Lambda para llamar a API de terceros y cargar datos en nuestras tablas Redshift, que pueden programarse para ejecutarse en ciertos intervalos o en respuesta a eventos específicos.
    #Create boto3 client for Lambda lambda_client = boto3.client('lambda') #Define callback function to invoke the lambda function using boto3 client def run_lambda_ingestion_job(): Lambda_client.invoke(FunctionName='<funtion_arn>')
    ) #Define the task for glue job for ingestion
    glue_job_step = PythonOperator( task_id=’lambda_task_for_api_to_landing’, python_callable=run_lambda_ingestion_job
    )

La siguiente imagen muestra cómo se vería este flujo de trabajo en la interfaz de usuario de Airflow.

Ahora contamos con un proceso integral y bien orquestado que utiliza una variedad de servicios de AWS para manejar diferentes etapas de nuestra canalización de datos, desde la ingesta hasta la transformación.

Conclusión

La combinación de los servicios de AWS y el proyecto de código abierto dbt proporciona una solución potente, flexible y escalable para crear plataformas de datos modernas. Es una combinación perfecta de manejabilidad y funcionalidad, con su marco basado en SQL fácil de usar y características como controles de calidad de datos, tipos de carga configurables y documentación y linaje detallados. Sus principios de “código separado de los datos” y reutilización lo convierten en una herramienta conveniente y eficiente para una amplia gama de usuarios. Este caso de uso práctico de creación de una plataforma de datos para una organización minorista demuestra el inmenso potencial de AWS y dbt para transformar la gestión y el análisis de datos, allanando el camino para obtener conocimientos más rápidos y decisiones comerciales informadas.

Para obtener más información sobre el uso de dbt con Amazon Redshift, consulte Administre transformaciones de datos con dbt en Amazon Redshift.


Acerca de los autores

Prantik Gachhayat es un arquitecto empresarial en Infosys y tiene experiencia en diversos campos tecnológicos y dominios comerciales. Tiene una trayectoria comprobada ayudando a grandes empresas a modernizar plataformas digitales y ofreciendo complejos programas de transformación. Prantik se especializa en diseñar plataformas modernas de análisis y datos en AWS. A Prantik le encanta explorar nuevas tendencias tecnológicas y le gusta cocinar.

Ashutosh Dubey es arquitecto de soluciones socio senior y líder tecnológico global en Amazon Web Services con sede en Nueva Jersey, EE. UU. Tiene una amplia experiencia especializándose en el campo de datos y análisis y AIML, incluida la IA generativa, contribuyó a la comunidad escribiendo diversos contenidos tecnológicos y ha ayudado a empresas Fortune 500 en su viaje a la nube hacia AWS.

punto_img

Información más reciente

punto_img