Introducción a dbt (data build tool)
dbt™ es una herramienta para transformación de datos que prioriza SQL, y permite a los equipos desplegar rápidamente y de manera colaborativa código analítico siguiendo las mejores prácticas de ingeniería de software como la modularidad, portabilidad, CI/CD y documentación. Con dbt, cualquier persona del equipo de datos puede contribuir de manera segura a la creación de pipelines de datos en producción.
¿Qué es dbt y cómo se utiliza en el contexto de Data Engineering?
dbt (data build tool) es una herramienta de línea de comandos (CLI) que permite a los equipos de ingeniería de datos transformar datos de su data lake o data warehouse directamente utilizando SQL, el lenguaje más comúnmente usado en el análisis de datos. dbt se utiliza para organizar, limpiar, transformar y agregar datos después de que han sido almacenados (una práctica conocida como ELT: Extract, Load, Transform), lo que permite a analistas e ingenieros de datos colaborar y construir flujos de trabajo de transformación de manera más eficiente y con mejores prácticas de ingeniería de software.
En resumen: dbt es la T de un proceso ELT.
Ventajas de dbt vs. herramientas ETL tradicionales
dbt ofrece varias ventajas sobre herramientas ETL tradicionales que realizan extracción, carga y transformación como un proceso integrado:
- SQL-First Approach: dbt permite que ingenieros y analistas utilicen SQL para definir transformaciones de datos, lo que lo hace accesible para un público más amplio.
- Modularidad y reutilización: los modelos en dbt se pueden organizar en módulos reutilizables, facilitando la gestión de dependencias y la modularización del código.
- Pruebas y documentación integradas: dbt facilita la creación de tests para verificar la calidad de los datos y genera documentación automáticamente, ayudando a mantener la calidad y comprensibilidad del warehouse.
- CI/CD y versionado: es compatible con prácticas de integración continua y despliegue continuo, y se integra fácilmente con sistemas de control de versiones, permitiendo colaboración efectiva y seguimiento de cambios en el tiempo.
Componentes básicos de dbt y arquitectura general
dbt consta de varios componentes clave que juntos facilitan la transformación de datos:
- Modelos: archivos SQL que representan las transformaciones que se aplicarán a los datos brutos. Pueden depender unos de otros, creando una cadena de transformaciones gestionada por dbt.
- Tests: dbt permite definir tests que verifican la integridad de los datos, como pruebas de unicidad o no nulidad, asegurando que los datos transformados cumplen con las expectativas.
- Paquetes: colecciones de modelos, tests y macros que se pueden reutilizar entre proyectos, promoviendo la reutilización de código y la colaboración.
- Perfiles y proyectos: la configuración de conexión al warehouse y las configuraciones específicas del proyecto se manejan a través de perfiles y archivos de proyecto, permitiendo que dbt sea flexible y adaptable a diferentes entornos.
- Macros: funciones definidas por el usuario que se pueden utilizar para escribir código SQL reutilizable y parametrizable.
Tip: para profundizar, la documentación oficial de dbt Developer Hub es el mejor punto de partida.
dbt Core (local) vs. dbt Cloud
dbt Core es la versión de código abierto de dbt que se instala y ejecuta localmente en tu máquina o en un servidor. Funciona principalmente como una herramienta de línea de comandos y permite definir transformaciones de datos utilizando SQL, organizándolas en modelos, tests y documentación que se ejecutan y generan mediante comandos específicos de dbt.
- Costo: gratuito.
- Flexibilidad: se puede instalar en cualquier entorno que soporte Python.
- Control: control total sobre el entorno de ejecución y la configuración.
- Integración: hay que integrarlo manualmente con otros servicios, como sistemas de CI/CD, para automatizar los flujos de trabajo.
dbt Cloud es una plataforma como servicio ofrecida por los creadores de dbt que proporciona una interfaz de usuario completa, hosting y gestión de dbt en un entorno cloud. Facilita la colaboración, automatización y escalabilidad de proyectos dbt sin necesidad de configuración extensa del lado del usuario.
- Costo: tiene un costo asociado, con varios planes que incluyen características adicionales.
- Facilidad de uso: interfaz de usuario amigable para gestionar proyectos, ejecutar y programar trabajos, y revisar el rendimiento de los modelos.
- Automatización y colaboración: funcionalidades integradas para la colaboración en equipo, revisión de código, e integración con sistemas de versionado como GitHub o GitLab.
- Soporte y seguridad: soporte técnico y funcionalidades avanzadas de seguridad y gestión de acceso.
Tip: dbt Core es ideal si preferís una solución gratuita, controlable y personalizable, sobre todo si ya tenés infraestructura de CI/CD y versionado establecida. dbt Cloud conviene a equipos que buscan una solución robusta y lista para usar, con menos configuración técnica.
Instalación de dbt Core
Requisitos
Antes de comenzar con la instalación de dbt Core, asegurate de tener lo siguiente:
- Python: versión 3.6 o superior.
- pip: el instalador de paquetes de Python.
- Git: para gestionar el control de versiones (opcional pero recomendado).
- Base de datos o motor de SQL: una base de datos o motor compatible con dbt para ejecutar tus transformaciones de datos.
Paso a paso
-
Verificar la instalación de Python y pip
Asegurate de que Python y pip están instalados en tu sistema:
bashpython --version pip --versionSi no tenés Python instalado, podés descargarlo desde python.org.
-
Crear un entorno virtual (opcional pero recomendado)
Es una buena práctica crear un entorno virtual para gestionar las dependencias del proyecto:
bashpython -m venv mydbt-envActivá el entorno virtual:
En Windows:
bashmydbt-env\Scripts\activateEn macOS y Linux:
bashsource mydbt-env/bin/activate -
Instalar dbt Core usando pip
Con el entorno virtual activado (si decidiste usar uno), instalá dbt Core utilizando pip. Adicionalmente se recomienda instalar el adaptador para el motor de SQL que vayas a utilizar:
bashpython3 -m pip install dbt-core dbt-ADAPTER_NAME -
Verificar la instalación de dbt
Finalmente, verificá que dbt se haya instalado correctamente:
bashdbt --versionDeberías ver una salida que indica la versión de dbt instalada, confirmando que dbt está listo para ser utilizado.
Comando dbt no se reconoce en la consola
Uno de los problemas más comunes al instalar dbt es que el comando dbt no se reconoce en la consola. Este problema puede deberse a varias razones, dependiendo del sistema operativo.
Windows
- Verificá que Python esté en el PATH: asegurate de que Python y pip estén en el PATH del sistema ejecutando
python --versionypip --versionen una nueva terminal. Si no se reconocen, tenés que agregar Python al PATH (durante la instalación de Python hay una opción para hacerlo). - Verificá que el entorno virtual esté activado con
mydbt-env\Scripts\activate. - Reinstalá dbt dentro del entorno virtual con
pip install dbt-core dbt-ADAPTER_NAME.
macOS y Linux
-
Verificá que Python y pip estén correctamente instalados con
python3 --versionypip3 --version. Si no se reconocen, instalá Python desde el gestor de paquetes de tu sistema o desde python.org. -
Verificá que el entorno virtual esté activado con
source mydbt-env/bin/activate. -
Reinstalá dbt con
pip install dbt-core dbt-ADAPTER_NAME. -
Si el comando
dbtsigue sin reconocerse, es posible que la carpeta de scripts de pip no esté en el PATH. Normalmente la ruta es~/.local/binpara instalaciones locales de pip:bashexport PATH="$HOME/.local/bin:$PATH"Agregá esta línea al archivo de configuración de tu shell (
.bashrc,.zshrc, etc.) para que se aplique en cada nueva terminal. En macOS con zsh, agregala también a.zprofile.
Tip: siguiendo estos pasos deberías poder resolver el problema y que el comando
dbtsea reconocido en la consola de tu sistema operativo.
Configuración de un proyecto dbt
Para configurar un proyecto dbt desde cero en tu entorno local, seguí estos pasos:
Paso 1: creá y configurá un proyecto dbt
-
Inicializá un nuevo proyecto dbt:
bashdbt init my_dbt_projectEsto creará una estructura de directorios básica para tu proyecto dbt.
-
Configurá el archivo
profiles.ymlEl archivo
profiles.ymlse utiliza para configurar la conexión a tu base de datos. Generalmente se encuentra en el directorio~/.dbt/. Ejemplo de configuración para PostgreSQL:yamlmy_dbt_project: target: dev outputs: dev: type: postgres host: localhost user: tu_usuario pass: tu_contraseña port: 5432 dbname: tu_base_de_datos schema: esquema_dbt -
Editá el archivo
dbt_project.ymlEste archivo se encuentra en la raíz de tu proyecto dbt y se utiliza para configurar aspectos específicos del proyecto, como los directorios de modelos y el nombre del esquema:
yamlname: 'my_dbt_project' version: '1.0' config-version: 2 # Configuración de la ruta de los modelos model-paths: ["models"] # Configuración de la ruta de los tests test-paths: ["tests"] # Configuración de la ruta de los datos data-paths: ["data"] # Configuración de la ruta de los análisis analysis-paths: ["analysis"] # Configuración de la ruta de los documentos docs-paths: ["docs"] # Configuración de la ruta de los snapshots snapshot-paths: ["snapshots"] # Configuración del esquema predeterminado target-path: "target" clean-targets: ["target", "dbt_modules"]
Paso 2: definí tus modelos
-
Creá un directorio para tus modelos:
bashmkdir -p models/my_first_model -
Definí un modelo básico creando un archivo SQL en el directorio
models:sql-- models/my_first_model.sql select 1 as id, 'Hello, dbt!' as message
Paso 3: ejecutá y probá tu proyecto
-
Compilá y ejecutá el modelo:
bashdbt run -
Verificá los resultados en tu base de datos, en el esquema configurado en
profiles.yml. -
Ejecutá pruebas (opcional):
bashdbt test
Paso 4: documentá tu proyecto
-
Generá la documentación:
bashdbt docs generate -
Visualizá la documentación:
bashdbt docs serveEsto abrirá un servidor web local donde vas a poder ver la documentación generada.
Siguiendo estos pasos, vas a haber configurado y ejecutado un proyecto dbt básico en tu entorno local.
Conexión a diferentes fuentes de datos
Para conectar dbt a diferentes fuentes de datos, seguí estos pasos generales.
1. Instalar el adaptador correspondiente
Cada fuente de datos requiere un adaptador específico. Usá pip para instalar el adaptador adecuado. Algunos ejemplos:
# PostgreSQL
pip install dbt-postgres
# Snowflake
pip install dbt-snowflake
# BigQuery
pip install dbt-bigquery
2. Configurar el archivo profiles.yml
El archivo profiles.yml define la conexión a tu fuente de datos y generalmente se encuentra en ~/.dbt/. Así se configura para algunas fuentes comunes:
PostgreSQL
my_dbt_project:
target: dev
outputs:
dev:
type: postgres
host: localhost
user: tu_usuario
pass: tu_contraseña
port: 5432
dbname: tu_base_de_datos
schema: esquema_dbt
Snowflake
my_dbt_project:
target: dev
outputs:
dev:
type: snowflake
account: tu_cuenta
user: tu_usuario
password: tu_contraseña
role: tu_rol
database: tu_base_de_datos
warehouse: tu_warehouse
schema: esquema_dbt
BigQuery
my_dbt_project:
target: dev
outputs:
dev:
type: bigquery
method: service-account
project: tu_proyecto
dataset: tu_dataset
keyfile: /ruta/a/tu/archivo-de-clave.json
3. Probar la conexión
Una vez configurado el archivo profiles.yml, probá la conexión ejecutando:
dbt debug
Este comando verificará que dbt pueda conectarse a la fuente de datos utilizando la configuración proporcionada.
4. Configurar el archivo dbt_project.yml
Asegurate de que el archivo dbt_project.yml en la raíz de tu proyecto esté correctamente configurado:
name: 'my_dbt_project'
version: '1.0'
config-version: 2
model-paths: ["models"]
target-path: "target"
clean-targets: ["target", "dbt_modules"]
Siguiendo estos pasos, vas a poder conectar dbt a diferentes fuentes de datos y empezar a trabajar en la transformación de tus datos.
