Logo

dev-resources.site

for different kinds of informations.

DBT (Data Build Tool)

Published at
3/19/2024
Categories
dataengineering
datamodelling
español
dbt
Author
luiherch
Author
8 person written this
luiherch
open
DBT (Data Build Tool)

DBT

En este post voy a hablar un poco sobre una herramienta que he utilizado mucho últimamente y está comenzando a adoptarse en el campo de la ingeniería de datos: DBT

DBT (Data Build Tool) es una herramienta para el modelado de datos. Como veremos a continuación, está orientada al desarrollo de pipelines de datos.

Vamos a ver las principales características de esta herramienta:

  • Tiene conectores a las principales plataformas de datos (Snowflake, Postgres, Redshift, Databricks...).
  • Utiliza Python, lo cual implica que es muy sencillo de instalar y es multiplataforma.
  • Genera código SQL mediante el renderizado de plantillas Jinja.

Podríamos resumir DBT como un renderizador de código SQL a partir de plantillas. En pocas palabras: genera código SQL y lo ejecuta por nosotros en el destino que especifiquemos en la configuración.

Por supuesto, tiene otras muchas funcionalidades interesantes que mencionaré más adelante, pero la esencia es básicamente esa.

Entonces, ¿cuáles son las principales ventajas de usar DBT? ¿Por qué no simplemente escribir SQL plano y ejecutarlo u orquestarlo con alguna otra herramienta dedicada?

Ventajas

  1. En primer lugar, nos permite adoptar un modelo ELT frente al ETL algo más tradicional. Recordad que mientras que en una ETL, transformamos los datos al vuelo antes de insertarlos en nuestro destino, ELT trata de cargar los datos en crudo en el destino y transformarlos una vez estén en el propio destino. Os dejo una imagen para refrescar el concepto:
    ELT
    DBT permite utilizar SQL para transformar los datos una vez están ya cargados en el warehouse.

  2. Una ventaja fundamental para mí es poder hacer un seguimiento de las transformaciones que se van realizando a lo largo de los distintos modelos. A esto se le conoce como linaje de datos. Podemos saber exactamente qué datos están siendo usados por cada modelo. Esto es increíblemente útil, ya sea para estimar el riesgo de actualizar una tabla o simplemente entender las transformaciones que se van realizando. DBT te permite visualizar esto mediante un DAG (Directed Acyclic Graph), lo cuál es muy oportuno ya que es una manera muy sencilla de entender las relaciones entre todos tus modelos.

  3. Nos permite tener versionados todos nuestros modelos. Podéis usar vuestra herramienta de control de versiones favoritas, en mi caso git, para hacer un seguimiento de todos los cambios que se llevan a cabo. No me digáis que no es horrible tener miles de tablas o vistas con sus definiciones guardadas en otro lugar y, lo más seguro, desactualizadas.

  4. Documentación automática. DBT tiene un par de comandos muy sencillos que permiten generar automáticamente y servir la documentación del proyecto. Además, se puede (y se debe) añadir toda la información que se desee a los modelos mediante ficheros YAML. Lo sé... no soy un gran fan del YAML pero en DBT se utiliza para todo así que es lo que hay. Yo concretamente suelo utilizar GitHub Pages para desplegar la documentación y no tener que ocuparme de absolutamente nada, pero también se puede hostear localmente en un periquete.

  5. Es SQL-first. ¿Qué quiero decir con esto? Que, quitando toda la parafernalia de la configuración del proyecto, tan sólo hay que escribir SQL con plantillas. Esto significa que no hace falta saber Python ni nada raro para utilizar la herramienta, simplemente SQL (templatizado). De esta manera, otros equipos como el de analíticas pueden colaborar en el desarrollo de los modelos.

  6. Es open source. Creo que no hay nada más que añadir.

  7. Nos permite añadir distintos tests. Por ejemplo, comprobar que los valores de una columna sean únicos o no nulos. O alertarnos si una fuente de datos no ha sido actualizada en un cierto plazo de tiempo. Podemos definir nuestros propios tests o utilizar paquetes de terceros que vengan ya con tests predefinidos.

Hasta aquí las principales ventajas que existen al utilizar esta herramienta, vamos ahora con la otra cara de la moneda.

Desventajas

  1. Se añade complejidad. Configurar el proyecto y orquestarlo todo requiere bastante tiempo aunque no sea difícil per se. Además, se convierte en una nueva pieza que supervisar en nuestro stack de datos... Hay que sopesar el valor que vamos a poder sacar en cada caso antes de implementar esta herramienta para ver si merece la pena el esfuerzo adicional o no.

  2. ELT no es siempre la mejor opción. En muchas ocasiones, el tradicional ETL es más adecuado y más sencillo dependiendo del caso de uso.
    ETL

  3. Me parece costosos manejar distintos proyectos/entornos. Hay que configurar un montón de perfiles, targets etc.. para que cada cosa se renderice donde toca y a veces es frustrante, ya que la herramienta hace muchas cosas por debajo y hay que entender bien el funcionamiento interno para conseguir que se comporte como deseamos.

  4. No tiene GUI. Aunque esto no sea necesariamente una desventaja, si que hace que no sea tan intuitivo, sobre todo para principiantes.

  5. Hay que seguir las convenciones y mejores prácticas a raja tabla. Este tipo de proyectos crecen muy rápido y si no se organizan bien de forma clara y con una convención acordada desde el inicio, el proyecto puede desbordarse muy rápido y volverse ilegible. Y, creedme, puede volverse un verdadero infierno. Con macros que interfieren con el funcionamiento esperado, modelos por todas partes, sources inexistentes que hacen saltar errores y código no uniforme por doquier.

Y hasta aquí esta pequeña sinopsis sobre la herramienta y sus principales características. Ya sabéis que lo bueno, si breve, dos veces bueno. En un futuro (espero que próximo) subiré contenido más técnico sobre DBT.

dbt Article's
30 articles in total
Favicon
Parte 1: Introdução ao dbt
Favicon
Explorer l'API de 360Learning : de l'agilité de Power Query à la robustesse de la Modern Data Stack
Favicon
Cross-Project Dependencies Handling with DBT in AWS MWAA
Favicon
Building a User-Friendly, Budget-Friendly Alternative to dbt Cloud
Favicon
Working with Gigantic Google BigQuery Partitioned Tables in DBT
Favicon
dbt (Data Build Tool). Data Engineering Student's point of view.
Favicon
An End-to-End Guide to dbt (Data Build Tool) with a Use Case Example
Favicon
Avoid These Top 10 Mistakes When Using Apache Spark
Favicon
DBT and Software Engineering
Favicon
Analyzing Svenskalag Data using DBT and DuckDB
Favicon
Becoming an Analytics Engineer I
Favicon
Final project part 5
Favicon
Visualization in dbt
Favicon
Building a project in DBT
Favicon
DBT (Data Build Tool)
Favicon
Production and CI/CD in dbt
Favicon
Comparing Snowflake Dynamic Tables with dbt
Favicon
A 2024 Explainer dbt Core vs dbt Cloud (Enterprise)
Favicon
Testing and documenting DBT models
Favicon
Introduction to dbt
Favicon
Creating a Self-Service Data Model
Favicon
Simplifying Data Transformation in Redshift: An Approach with DBT and Airflow
Favicon
Avoiding the DBT Monolith
Favicon
How Starburst’s data engineering team builds resilient telemetry data pipelines
Favicon
Building ETL/ELT Pipelines For Data Engineers.
Favicon
Running Transformations on BigQuery using dbt Cloud: step by step
Favicon
Managing UDFs in dbt
Favicon
Building a Modern Data Pipeline: A Deep Dive into Terraform, AWS Lambda and S3, Snowflake, DBT, Mage AI, and Dash
Favicon
End-to-End Data Ingestion, Transformation and Orchestration with Airbyte, dbt and Kestra
Favicon
Build an Open Source LakeHouse with minimun code effort (Spark + Hudi + DBT+ Hivemetastore + Trino)

Featured ones: