Saltar al contenido principal

Introducción al paquete dbt-utils

Aprende cómo dbt-utils mejora dbt con macros preconstruidas, funciones clave y casos prácticos de uso. Agiliza tus transformaciones de datos con nuestra guía paso a paso.
Actualizado 29 jul 2024  · 12 min de lectura

El paquete dbt-utils es un potente conjunto de herramientas que simplifica y mejora tus procesos de transformación de datos. En esta guía, te presentaremos dbt-utils, mostrándote cómo puede agilizar tu flujo de trabajo con sus macros predefinidas para operaciones SQL comunes.

¿Qué es dbt-utils?

dbt-utils package

dbt-utils es un paquete de dbt que proporciona un conjunto de herramientas de macros preconstruidas que mejoran la funcionalidad de los proyectos dbt. dbt-utils reduce la complejidad añadiendo capas de abstracción, lo que permite una transformación de datos más eficaz y coherente.

Si estás familiarizado con las bibliotecas en Python y los paquetes en R, el paquete dbt-utils sería algo parecido.

Con estas macros estandarizadas que se utilizan para las operaciones comunes del Lenguaje de Consulta Estructurado (SQL), dbt-utils garantiza que no sea necesario el duro trabajo de codificar todas las transformaciones desde cero.

Aprovechar estas utilidades elimina la necesidad de reinventar la rueda al integrar en tus proyectos un conjunto de macros validadas por la comunidad, mejorando la capacidad de mantenimiento y fomentando una cultura de mejores prácticas.

Principales características y funcionalidades

dbt-utils proporciona una serie de características y funcionalidades que hacen que la transformación de datos sea más eficiente y ágil. Entre ellas están:

1. Macros normalizadas

dbt-utils ofrece una amplia gama de macros preconstruidas para operaciones SQL comunes que utilizan plantillas Jinja, como uniones, agregaciones, filtrado, etc.

Estas macros están estandarizadas para garantizar la coherencia entre proyectos y reducir la necesidad de codificación repetitiva.

Por ejemplo, aquí tienes algunas macros utilizadas por los ingenieros analíticos:

  • date_spine: Crea una secuencia continua de fechas entre dos fechas especificadas, útil para el análisis de series temporales.
  • pivot: Transforma filas en columnas dinámicamente, simplificando las operaciones de tabulación cruzada.
  • star: Obtiene todos los campos de las tablas especificadas en el modelo, excluyendo los del argumento except.
  • union_relations: Combina datos de varias relaciones con la misma estructura utilizando un union all.
  • generate_series: Crea una serie de datos numéricos, útil para el análisis de series temporales.
  • surrogate_key: Produce un identificador único para las filas concatenando varios campos.

Con estas macros, SQL puede realizar tareas que de otro modo serían complejas y repetitivas.

2. Asistencia en esquemas y documentación

dbt-utils proporciona herramientas útiles para gestionar los esquemas y la documentación de los modelos de datos. Esto facilita el seguimiento de los cambios y la organización de los proyectos.

4. Capacidad de ensayo

Con dbt-utils, los usuarios pueden escribir fácilmente pruebas para garantizar la precisión y calidad de sus transformaciones de datos. Estas pruebas pueden automatizarse e integrarse en procesos de integración continua, lo que permite canalizar los datos de forma más eficaz y fiable.

¿Por qué utilizar dbt-utils?

Entonces, ¿por qué utilizar este paquete?

Veamos primero algunas de sus ventajas:

  1. SQL complejo simplificado: Con el uso de macros, dbt-utils simplifica la escritura de consultas SQL complejas. Esto ahorra tiempo y esfuerzo a los analistas de datos y a los ingenieros, permitiéndoles centrarse en análisis de alto nivel en lugar de enfrascarse en el código.
  2. Documentación eficiente: Como ya hemos dicho, dbt-utils puede ayudar a generar documentación automáticamente.
  3. Mayor control de calidad: Al incorporar funciones de comprobación a las canalizaciones de datos, dbt-utils ayuda a garantizar la precisión y fiabilidad de las transformaciones de datos.
  4. Validación automatizada de datos: Con el uso de dbt-utils, la validación de datos puede automatizarse e integrarse en el proceso de desarrollo. Esto garantiza que cualquier cambio realizado en los modelos de datos se valide inmediatamente y que cualquier problema potencial se detecte a tiempo.
  5. Código abierto: dbt-utils es de código abierto, por lo que muchos desarrolladores pueden contribuir al desarrollo del paquete. Esto significa que el paquete se actualizará constantemente.

Instalación y configuración de dbt-utils

Veamos a continuación cómo introducir el paquete dbt-utils en tu flujo de trabajo de datos.

Requisitos previos

Antes de utilizar dbt-utils, es imprescindible estar familiarizado con SQL y comprender los fundamentos de dbt (herramienta de construcción de datos). Ya deberías tener un proyecto dbt inicializado y configurado.

Si necesitas un repaso, puedes consultar nuestro curso de Introducción al dbt y el tutorial de dbt.

Además, es necesaria una clara alineación de versiones entre tu núcleo dbt y el paquete dbt-utils. Es aconsejable comprobar la compatibilidad entre versiones de dbt para evitar conflictos o funcionalidades obsoletas.

Instalación paso a paso

Para comenzar la integración de dbt-utils en tu pila de datos, empieza por asegurarte de que tu entorno de desarrollo está correctamente configurado.

Paso 1: Instalar dbt

En primer lugar, asegúrate de que dbt está instalado en tu entorno. Puedes instalar dbt mediante pip:

pip install dbt

Paso 2: Añade dbt-utils a tu proyecto dbt

Para instalar dbt-utils, añade lo siguiente a tu archivo packages.yml en el directorio raíz de tu proyecto dbt.

Crea este archivo en la raíz de tu proyecto dbt si no existe, y añade lo siguiente:

packages:
- package: dbt-labs/dbt_utils
version: "1.1.1" # Use the latest version compatible with your dbt version

En este archivo yaml, también especificarás la versión necesaria del paquete. Asegúrate de utilizar la última versión compatible con la versión de dbt que tengas instalada.

Paso 3: Instala el paquete

Después de modificarlo, la instalación está a un simple comando de distancia.

La ejecución correcta de este comando recuperará e instalará dbt-utils, preparándote para una funcionalidad mejorada.

Ejecuta el siguiente comando en tu terminal dentro del directorio de tu proyecto dbt:

dbt deps

Este comando instala todos los paquetes que figuran en tu packages.yml.

dbt-utils Utilidades clave y sus aplicaciones

El paquete dbt-utils proporciona un conjunto de funciones de ayuda comunes que agilizan las transformaciones SQL en los proyectos dbt.

Estas funciones ayudan a los desarrolladores a evitar redundancias y a concentrarse en su lógica empresarial exclusiva.

Aquí tienes algunas funciones de dbt-utils:

1. Generadores SQL

Los generadores SQL de dbt-utils son útiles para crear código SQL modular.

Por ejemplo, las macros deduplicate son excelentes para eliminar filas duplicadas manteniendo el orden de los datos. Se pueden eliminar duplicados de modelos, tablas e incluso de Expresiones Comunes de Tabla (CTE).

2. Pruebas genéricas

Las pruebas genéricas se utilizan para validar los datos de una tabla o vista. Pueden personalizarse fácilmente para ajustarse a requisitos específicos y proporcionan información valiosa sobre la calidad de los datos que se procesan.

Por ejemplo, la macro expression_is_true comprueba si una determinada expresión es verdadera. Esto se puede utilizar de forma flexible para verificar varias condiciones, como:

  • Longitud de columna
  • Resultado de una operación algebraica básica concreta

3. Ayudantes Jinja

Los ayudantes de Jinja son útiles para crear consultas SQL dinámicas que pueden personalizarse fácilmente en función de la entrada del usuario o de datos variables. Permiten la lógica condicional y los bucles dentro de las sentencias SQL.

Las plantillas Jinja se utilizan para definir y especificar estas macros.

Un ejemplo es la macro pretty_time, que devuelve una cadena con la hora actual.

4. Macros web

Las macros web son similares a los ayudantes Jinja, pero están diseñadas específicamente para proyectos basados en la web. Permiten generar y manipular HTML de forma dinámica, facilitando la creación de páginas web interactivas y con capacidad de respuesta.

Una macro útil es la macro get_url_path, que obtiene la ruta de la página de la URL. Así es como se ve la sintaxis:

{{ dbt_utils.get_url_path(field='page_url') }}

5. Macros introspectivos

Las macros introspectivas son macros que pueden acceder y manipular datos dentro del ámbito actual. Esto permite un tratamiento dinámico y eficaz de los datos, reduciendo la necesidad de funciones o código adicionales.

Un ejemplo es la macro get_column_values, que devuelve los resultados de la consulta como un objeto.

Casos prácticos de uso de las utilidades dbt

Caso práctico 1: Simplificar las consultas complejas

Ejemplo de situación: Una empresa tiene un gran conjunto de datos que contiene información de clientes, datos de transacciones y datos de productos. Necesitan crear un informe que muestre las ventas totales de cada categoría de productos en el último trimestre.

En lugar de escribir complejas consultas SQL para unir varias tablas y calcular las ventas de cada categoría, pueden utilizar las utilidades dbt para extraer fácilmente los datos relevantes y manipularlos dentro de sus macros o modelos.

Por ejemplo, pueden utilizar get_filtered_columns_in_relation para filtrar sólo las columnas necesarias relacionadas con los datos de los productos y, a continuación, utilizar la macro de suma para calcular las ventas totales de cada categoría.

Esto simplifica el proceso y lo hace más eficaz, ahorrando tiempo y reduciendo errores.

Aplicación del código:

Para aplicar esta solución en una base de datos simulada, puedes seguir estos pasos:

Utiliza la macro get_filtered_columns_in_relation para filtrar sólo las columnas necesarias de los datos del producto. Esta macro te ayudará a seleccionar eficazmente las columnas relevantes.

-- models/product_data_filtered.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
)
select * from product_data

A continuación, crea un modelo para unir los datos del producto, la transacción y el cliente. A continuación, utiliza la función suma para calcular las ventas totales de cada categoría de productos en el último trimestre.

-- models/total_sales_by_category.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
),
transaction_data as (
select
product_id,
sale_amount,
transaction_date
from {{ ref('transactions') }}
where transaction_date >= date_trunc('quarter', current_date) - interval '1 quarter'
),
joined_data as (
select
p.category,
t.sale_amount
from product_data p
join transaction_data t
on p.product_id = t.product_id
)
select
category,
sum(sale_amount) as total_sales
from joined_data
group by category

Tras definir los modelos, ejecuta los modelos dbt para ejecutar las transformaciones y generar el informe.

dbt run

Aquí tienes una explicación del código anterior:

La macro get_filtered_columns_in_relation ayuda a seleccionar sólo las columnas necesarias (product_id and category) de la tabla de productos, simplificando el conjunto de datos.

A continuación, los datos filtrados de los productos se unen a los datos de las transacciones mediante SQL para obtener los importes de las ventas de cada producto. A continuación, calcula las ventas totales de cada categoría de productos en el último trimestre utilizando la función de suma agregada.

Caso práctico 2: Garantizar la calidad de los datos con pruebas genéricas

Ejemplo de situación:

En este caso práctico, seguiremos trabajando con el mismo conjunto de datos simulado del caso práctico 1. Sin embargo, en lugar de crear un informe, nuestro objetivo es garantizar la calidad de los datos ejecutando pruebas genéricas sobre ellos.

Aplicación del código:

A continuación encontrarás ejemplos de cómo aplicar estas pruebas a tu conjunto de datos:

1. Comprobación de la proporción de nulos

En esta prueba genérica, sólo afirmaremos los valores que se ajusten a la proporción no nula que especifiquemos. Para ello utilizaremos la prueba not_null_proportion.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_null_proportion:
at_least: 0.95

En este ejemplo, incluimos un argumento opcional adicional at_least para establecer que la proporción no nula tenga un máximo de 0,95.

2. Comprobación de campos vacíos

En este ejemplo, utilizaremos la prueba not_empty_string para comprobar si hay cadenas vacías en el campo product_id.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_empty_string

3. Comprobación de la integridad referencial

Utilizando la función relationships_where te asegurarás de que cada product_id de la tabla de transacciones existe en la tabla de productos.

# models/transactions.yml
version: 2
models:
- name: transactions
columns:
- name: product_id
tests:
- dbt_utils.relationships_where:
to: ref('products')
field: product_id

En este ejemplo, nos aseguramos de que todos los valores product_id de la tabla transactions corresponden a entradas válidas de la tabla tabla. Se trata de una comprobación básica de la integridad de la relación.

Ten en cuenta que también puedes combinar varias pruebas al mismo tiempo para poder cubrir varias comprobaciones de integridad.

Una vez definidas todas las pruebas en tu archivo de configuración yaml, utiliza el comando dbt test para ejecutar todas las pruebas de esquema definidas.

dbt test

dbt utils Buenas prácticas

Aprovechar dbt-utils eficazmente

Al utilizar dbt, es importante seguir las mejores prácticas para garantizar que tu proyecto se desarrolle de forma eficiente y eficaz. Cuando utilices dbt-utils, debes tener en cuenta algunos puntos clave:

  1. Combina varias pruebas en lugar de definirlas por separado: Como ya hemos dicho, puedes combinar varias pruebas en una sola declaración de prueba. Esto ayuda a reducir la redundancia y a mejorar el rendimiento general de tu proyecto.
  2. Utiliza la macro dbt_utils.surrogate_key al crear claves sustitutivas: Esta macro genera automáticamente claves sustitutivas basadas en otras columnas de tu tabla, ahorrándote tiempo y esfuerzo.

Errores comunes y cómo evitarlos

A continuación se indican algunos errores comunes que los usuarios pueden encontrar al utilizar dbt-utils, junto con consejos para evitarlos:

  1. No configurar correctamente las macros personalizadas: Si creas tus propias macros personalizadas, asegúrate de que están correctamente configuradas y probadas antes de incorporarlas a tu proyecto.
  2. No actualizar a la última versión de dbt-utils: Es importante actualizar regularmente a la última versión de dbt-utils para aprovechar las nuevas funciones y las correcciones de errores.

Conclusión

dbt-utils es una potente herramienta para agilizar, probar y automatizar tareas en tu proceso de modelado de datos. Es una parte esencial del uso de dbt y puede ahorrarte tiempo y esfuerzo en el desarrollo de tus modelos de datos.

También puede resultarte útil este tutorial sobre dbt o esta lista de herramientas alternativas de ingeniería de datos.

Si estás interesado en iniciarte en el dbt y quieres seguir aprendiendo, ¡explora también nuestro Curso de Introducción al dbt!

Temas

¡Continúa hoy tu viaje de aprendizaje dbt!

Certificación disponible

curso

Introducción al dbt

4 hr
4.7K
Este curso presenta el dbt para el modelado de datos, las transformaciones, las pruebas y la creación de documentación.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Tutorial de Chroma DB: guía paso a paso

Con Chroma DB, puedes gestionar fácilmente documentos de texto, convertir texto en incrustaciones y hacer búsquedas por similitud.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Paquetes R: Tutorial para principiantes

Una introducción a los paquetes de R basada en 11 de las preguntas más frecuentes de los usuarios.
DataCamp Team's photo

DataCamp Team

23 min

tutorial

Tutorial de DAX en Power BI para principiantes

Aprende qué es DAX y descubre la sintaxis y las funciones DAX fundamentales que necesitarás para llevar tus conocimientos de Power BI al siguiente nivel.
DataCamp Team's photo

DataCamp Team

9 min

tutorial

Tutorial de tuberías en R para principiantes

Aprenda más sobre el famoso operador de tuberías %>% y otras tuberías en R, por qué y cómo debe utilizarlas y qué alternativas puede considerar.
Karlijn Willems's photo

Karlijn Willems

25 min

tutorial

Introducción al aprendizaje automático estadístico

Descubra la potente fusión de estadística y aprendizaje automático. Explore cómo las técnicas estadísticas sustentan los modelos de aprendizaje automático, permitiendo la toma de decisiones basada en datos.
Joanne Xiong's photo

Joanne Xiong

11 min

tutorial

Tutorial FLAN-T5: Guía y puesta a punto

Una guía completa para afinar un modelo FLAN-T5 para una tarea de respuesta a preguntas utilizando la biblioteca de transformadores, y ejecutando la inferencia optmizada en un escenario del mundo real.
Zoumana Keita 's photo

Zoumana Keita

15 min

See MoreSee More