DBT: Transformaciones de Datos con SQL

Última actualización: 26/09/2022

DBT (Data Build Tool) es una herramienta que está ganando popularidad. En este artículo de introducción aprenderás qué es DBT, su funcionamiento y ventajas para transformar datos con SQL.

introducción a DBT

¿Qué es DBT (Data Build Tool)?

DBT permite a los ingenieros de datos y analistas realizar transformaciones en los datos escribiendo sentencias SQL de tipo SELECT. Internamente, DBT traduce estas sentencias en tablas y en vistas. De esta forma facilita la creación de transformaciones sobre los datos disponibles en el data warehouse.

Para funcionar, necesita Python 3.7 o superior. Es posible instalarlo fácilmente con pip e incluye dos componentes open source: una CLI o interfaz de línea de comandos y la interfaz gráfica de usuario.

DBT CLI ofrece la capacidad de interactuar con la herramienta para ejecutar los modelos, ejecutar tests o generar documentación. La interfaz de usuario (UI) se usa para visualizar la documentación y el linaje, pero no permite editar las configuraciones ni realizar cambios en el sistema.

Transformación de datos con DBT
Transformación de datos con DBT

Hay que entender que DBT no realiza movimientos de datos, por lo que no lo deberíamos considerar una herramienta ETL, ELT ni comparar con ellas ya que solamente se encargaría de la «T». Las transformaciones que soporta son las que se pueden hacer con SQL, con las que hace pushdown a la tecnología de data warehouse para su ejecución y se configuran con ficheros YAML y plantillas Jinja dinámicas.

DBT se apoya en dos lenguajes o tecnologías:

  • SQL
  • YAML (Jinja)

Características de DBT

Un modelo en DBT es simplemente una sentencia SELECT que permite transformar datos. Este modelo debe ser orquestado con otros modelos, y es que DBT permite escribir SQL de manera modular. Para ejecutar, se parte de la creación de un DAG (Grafo Dirigido Acíclico) interno que transforma los datos.

En DBT podemos tener dos modelos que usan la misma subconsulta. En vez de tener que replicarla y mantenerla por duplicado, podemos referenciarla. Lo mismo ocurre a nivel de campos dentro de una consulta.

Así, vemos que los modelos de DBT se basan en el resultado de otros modelos o de la salida de las fuentes de datos. Estas fuentes de datos también se pueden definir con ficheros de configuración YAML.

Para enriquecer las consultas se usa Jinja2, un sistema de plantillas para Python. Este motor permite escribir consultas parametrizadas, reutilizar bloques de código y sentencias y ocultar la complejidad subyacente para hacer el código más legible. La modularización permite un mantenimiento del código más sencillo, lo que facilita la labor de los equipos de desarrollo.

DBT es compatible con Snowflake, Redshift, Databricks, Presto, Postgres y BigQuery a través de adaptadores. El lenguaje que genera tras compilar debe ser el que entienda el destino. Consigue compilar y capturar las excepciones de manera ordenada, así como gestionar las dependencias de las tablas de forma automática.

Funcionamiento

Para inicializar un espacio de trabajo en DBT podemos ejecutar «dbt init» en la CLI. Esto crea la estructura del proyecto, lo que resulta muy útil como estándar para que todos los equipos puedan trabajar de forma similar.

La versión cloud en modo SaaS aporta además un IDE como entorno de desarrollo, logging, planificadores de trabajos y sistemas de alerta. Como cualquier solución cloud, la parte negativa es que introduce componentes adicionales y una mayor complejidad.

Generalmente, se puede desplegar en un contenedor docker con virtualenv y de esta forma encapsular la CLI.

También se puede integrar con un orquestador, como por ejemplo Airflow, de varias formas:

  1. Haciendo solo una llamada a DBT, y éste se encargará de gestionar el paralelismo de los modelos y del linaje.
  2. Llamando desde el orquestador a cada agrupación que hayamos definido en el modelo de DBT. Esta agrupación puede ser una capa o área funcional como staging o validaciones. Este modo de orquestación es el más popular.
  3. El orquestador genera el flujo como lo hace DBT de forma automatizada.

Linaje de Datos

DBT también es compatible con la gestión de metadatos de linaje, aunque debemos implementarla a mano si no estamos usando la versión cloud.

Documentacion DBT

Para ayudarnos con esta tarea, nos proporciona un método para generar automáticamente documentación de las transformaciones de datos. Esta funcionalidad sirve una web local con información sobre el modelo, las columnas y las sentencias SQL usadas para su creación (UI). También nos muestra las dependencias en forma de gráfico para que visualmente sea más sencillo entender las transformaciones de datos.

Ventajas de Usar DBT

La principal ventaja de DBT es que elimina la necesidad de programar en Spark, ya sea con Scala u otro lenguaje. Antes, para conseguir esto, se debía desarrollar un motor propio que gestionaba la generación de código SQL a partir de metadatos, y luego enviarlo a través de JDBC al data warehouse, lo que es mucho más complejo y costoso.

Cualquier persona con conocimiento del lenguaje SQL puede escribir lógica de negocios y pruebas de calidad de datos. Esto resulta especialmente importante debido a la dificultad de encontrar profesionales de ingeniería de datos y, por tanto, es una ventaja disminuir la barrera de entrada.

Siguientes Pasos y Formación

Sigue aprendiendo sobre DBT y a usarlo en tus pipelines de datos. Te recomiendo para ello estos dos cursos que tienes disponibles en Udemy. Te guiarán de forma que puedas acelerar tu aprendizaje a un buen ritmo y empezar a trabajar cuanto antes a implementar tus modelos de transformación de datos.

Aprende DBT desde cero

Aprende DBT Desde Cero

Guía completa para aprender a usar la herramienta DBT, incluida la configuración y conexiones con Data Warehouses

DBT Bootcamp

DBT Bootcamp

Aprende ingeniería de datos y analítica con este curso de DBT que cubre la teoría y la práctica a través de un caso de uso real de Airbnb

Deja una respuesta