Programa
dbt (herramienta de creación de datos) es una potente herramienta utilizada por analistas e ingenieros de datos para transformar, probar y documentar datos en la pila de datos moderna.
Aunque es ampliamente conocido por sus capacidades de modelado, otra característica fundamental es dbt snapshot, que te permite capturar dimensiones que cambian lentamente (SCD) en tu almacén de datos.
Este tutorial proporcionará una explicación detallada sobre las instantáneas de dbt, sus casos de uso y su implementación. Yo haré lo siguiente:
- Define qué son las instantáneas de dbt.
- Explica cuándo y por qué utilizar instantáneas.
- Implementa una instantánea paso a paso.
- Visualiza datos instantáneos.
- Comparte algunas buenas prácticas y retos.
Para obtener más información sobre dbt, no te pierdas nuestra guía «¿Qué es dbt?». Introducción práctica para ingenieros de datos y nuestro curso Introducción a dbt.
¿Qué son las instantáneas de dbt?
Una instantánea dbt es un mecanismo para realizar un seguimiento de los cambios en los registros a lo largo del tiempo, especialmente para tablas en las que los cambios históricos no se conservan de forma predeterminada. Las instantáneas se utilizan principalmente para implementar dimensiones de cambio lento (SCD) de tipo 2. Almacenan versiones de filas cuando cambian las columnas de seguimiento.
Entre los casos de uso se incluyen:
- Seguimiento de los cambios en los perfiles de los clientes a lo largo del tiempo.
- Supervisar los cambios de estado en los datos operativos.
- Registro de la evolución de los atributos dimensionales para la elaboración de informes históricos precisos.
¿Por qué utilizar instantáneas de dbt? Ventajas y casos de uso
Las instantáneas de dbt son valiosas porque funcionan como un registro de los cambios en los datos a lo largo del tiempo, lo que permite realizar análisis históricos y generar informes de cumplimiento.
Ventajas
Estas son algunas de las ventajas que obtendrás al utilizar Instantáneas:
- Análisis de tendencias: Comprende cómo evolucionan el comportamiento, los atributos o el estado de los clientes.
- Auditoría y cumplimiento normativo: Demuestra los estados de los datos históricos a los auditores o reguladores.
- Depuración de canalizaciones de datos: Identifica cuándo se ha modificado un registro de forma inesperada para localizar problemas.
Casos de uso comunes
Las instantáneas pueden resultar útiles en algunas situaciones especiales, como por ejemplo:
- Seguimiento de las mejoras de membresía en programas de fidelización.
- Registro del historial de precios de productos en el comercio minorista.
- Captura de los cambios de departamento de los empleados en los sistemas de RR. HH.
Fundamentos arquitectónicos
Las instantáneas se integran a la perfección en el ecosistema de dbt, aprovechando su configuración y gestión de ejecución para crear tablas históricas de manera eficiente.
Veamos los tipos de modelos utilizados en los datos como ejemplo.
Hay dos modelos que se utilizan para los datos:
- Modelos estándar: Transforma datos para crear tablas de estado actual.
- Modelos instantáneos: Crea tablas con versiones para realizar un seguimiento de los cambios históricos.
Estos dos modelos difieren en su finalidad, métodos de almacenamiento y aplicaciones.
A continuación, se resumen las diferencias entre ambos:
|
Característica |
Modelos estándar |
Instantáneas |
|
Objetivo |
Transformaciones del estado actual |
Seguimiento histórico |
|
Almacenamiento |
Tabla o vista con datos actuales |
Tabla de historial de solo añadir |
|
Ideal para |
Modelos dimensionales/de hechos |
Dimensiones que cambian lentamente |
Cómo funcionan las instantáneas de dbt
Las instantáneas suelen seguir un flujo de trabajo estructurado que garantiza que todos los cambios se capturan de forma sistemática, y que incluye los siguientes pasos:
- Configuración: Define la estrategia de instantáneas, las claves únicas y las columnas de detección de cambios.
- Ejecución: Ejecuta «
dbt snapshot» para comparar los datos actuales con las instantáneas existentes. - Almacenamiento: dbt inserta nuevos registros para los cambios detectados y actualiza las marcas de tiempo de validez.
Pero, ¿cómo se realiza el seguimiento de los cambios en dbt?
Todos los cambios se registran en la tabla Instantánea de salida.
Si se detecta un cambio, dbt actualiza el campo « dbt_valid_to » (Fecha de última actualización) de la versión anterior con la marca de tiempo actual e inserta una nueva fila con el campo « dbt_valid_from » (Fecha de última actualización) como marca de tiempo actual.
Estrategias de instantáneas en dbt
Las instantáneas utilizan dos estrategias principales para detectar cambios.
1. Estrategia de marca de tiempo
- Definición: Utiliza un campo de marca de tiempo para detectar cambios.
- Cuándo utilizar un: La tabla de origen tiene marcas de tiempo fiables
updated_at.
2. Comprueba la estrategia
- Definición: Compara directamente las columnas especificadas.
- Cuándo utilizar un: La tabla de origen carece de marcas de tiempo fiables, pero es necesario realizar un seguimiento de los cambios en los atributos.
|
Estrategia |
Método de detección |
Ideal para |
|
Marca de tiempo |
Columna de marca de tiempo actualizada |
Tablas con marcas de tiempo fiables de última modificación |
|
Comprueba |
Comparación directa de columnas |
Tablas sin columnas de marca de tiempo |
Eliminaciones definitivas
Los cambios en los datos, como las eliminaciones, también se pueden rastrear, pero no de forma predeterminada. Sin embargo, hay una forma de cambiar eso para supervisar dichos cambios de eliminación definitiva.
- : Las instantáneas no registran las filas eliminadas de forma predeterminada.
- Solución: Establece
invalidate_hard_deletes=Truepara marcar las filas eliminadas con un valordbt_valid_to, conservando su último estado.
A continuación se muestra un ejemplo de una estrategia de verificación que se está implementando, teniendo en cuenta las eliminaciones definitivas:
{%
snapshot customers_snapshot %}
{%
set config(
target_schema='snapshots',
unique_key='customer_id',
strategy='check',
check_cols=['tier'],
invalidate_hard_deletes=True
)
%}
SELECT * FROM {{ source('customers') }}
{% endsnapshot %}
Guía de implementación para instantáneas de dbt
Ahora que sabemos cómo funcionan las instantáneas de dbt, veamos cómo implementarlas.
1. Conjunto de datos de muestra para el tutorial de Instantánea
Para practicar las instantáneas, crearemos una tabla de clientes de muestra que imita un sistema de membresía del mundo real. Esto nos proporciona algunos datos concretos para probar estrategias comunes de instantáneas.
import csv
from datetime import datetime
# Define the data
customers_data = [
["customer_id", "name", "tier", "updated_at"], # header row
[1, "Alice Tan", "Silver", "2025-07-01 10:00:00"],
[2, "Bob Lee", "Gold", "2025-07-01 10:00:00"],
[3, "Cheryl Lim", "Silver", "2025-07-01 10:00:00"]
]
# Write data to customers.csv
with open("customers.csv", mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(customers_data)
2. Configuración de tu proyecto dbt
Antes de poder implementar instantáneas, es esencial configurar correctamente tu proyecto dbt. Esto garantiza que tu entorno esté configurado para gestionar modelos, instantáneas, pruebas y documentación de forma estructurada y escalable.
Requisitos previos
- Asegúrate de tener instalado Python 3.7+.
- Instala dbt utilizando pip:
pip install dbt
Reemplaza dbt-postgres por tu adaptador de almacén, por ejemplo, dbt-snowflake o dbt-bigquery, según tu entorno.
Instrucciones de configuración paso a paso
1. Navega hasta el directorio de proyectos deseado.
Aquí es donde almacenarás tus proyectos de análisis o ELT. En este caso, almacenaremos todos los archivos relacionados en esta carpeta del proyecto dbt.
cd ~/dbt-snapshot-project
2. Inicializa un nuevo proyecto dbt.
Crea un archivo de configuración llamado dbt_project.yml:
Pega lo siguiente en tu archivo de proyecto:
name: dbt_snapshots_project
version: '1.0'
profile: austinchia
seeds:
dbt_snapshots_project:
+quote_columns: false
3. Comprueba tu conexión.
dbt debug
Este debería ser el resultado del comando:

4. Carga las semillas en una base de datos local.
Ejecuta el siguiente comando:
dbt seed
Este debería ser el resultado del comando:

5. Configura los ajustes de conexión de tu base de datos.
En el archivo profiles.yml, que suele encontrarse en ~/.dbt/profiles.yml.
Esto es lo que hay dentro de mi archivo de perfiles:
austinchia:
target: dev
outputs:
dev:
type: sqlite
threads: 1
database: ./dbt_snapshots_project.db
schema: main
schema_directory: ./schemas
schemas_and_paths:
main: ./dbt_snapshots_project.db
extensions:
- "C:/sqlean/crypto.dll"
Si estás utilizando una base de datos SQLite como yo, necesitarás instalar el extensión SQLean .
6. Ingesta tus datos en los modelos de staging de dbt:
Crea una nueva carpeta llamada «models». En esa carpeta, crea un archivo llamado stg_customers.sql.
Pega el siguiente código en el archivo:
SELECT
*
FROM {{ ref('customers') }}
7. Crea modelos provisionales utilizando el siguiente comando en dbt.
dbt run --select stg_customers
Este debería ser el resultado del comando:

3. Configuración de dbt Snapshot
- Crea un directorio llamado snapshots/.
- Escribe tu archivo SQL de instantánea con la configuración adecuada.
Para este ejemplo, puedes utilizar el siguiente código para realizar una instantánea con estrategia de marca de tiempo.
{% snapshot customers_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='customer_id',
strategy='timestamp',
updated_at='updated_at'
)
}}
select * from {{ ref('customers') }}
{% endsnapshot %}
4. Ejecutar dbt Snapshot
Ejecutar:
dbt snapshot
En este comando, dbt crea la tabla de instantáneas si no existe. También inserta nuevas filas para los cambios detectados.
Este debería ser el resultado del comando:

5. Comprobación de tablas de instantáneas
Ahora que has realizado la instantánea, deberías obtener un nuevo archivo snapshot.db creado en el directorio de archivos del proyecto.
He abierto esto en VSCode para ver cómo es este archivo:

Como puedes ver, contiene columnas adicionales como « dbt_updated_at » (Pago de la factura), etc. Estos son cruciales para determinar si se han realizado cambios en los datos y cuándo se han realizado.
Para obtener más guías prácticas sobre dbt, consulta nuestra guía Capa semántica con dbt.
Ejemplo: Seguimiento de los cambios en los datos con instantáneas dbt
Las instantáneas permiten a los equipos capturar un registro de auditoría completo de los cambios en cualquier atributo dentro de una tabla a lo largo del tiempo, lo que las hace muy útiles para el cumplimiento normativo, la depuración y el análisis.
- Crea una tabla de muestra «
customers» con los campos pertinentes. Esto incluye el ID del cliente, el nombre, el correo electrónico y la marca de tiempo updated_at para realizar un seguimiento de cuándo se producen los cambios.
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
updated_at TIMESTAMP
);
- Introduce los datos iniciales para simular un estado de referencia.
Utiliza el siguiente código para insertar datos en la tabla. Estos datos se utilizarán para los datos originales antes del cambio.
INSERT INTO customers VALUES
(1, 'Alice Tan', 'alice@example.com', '2025-07-01 10:00:00'),
(2, 'Bob Lee', 'bob.lee@example.com', '2025-07-01 10:00:00');
- Escribe una configuración de instantánea dbt para realizar un seguimiento de los cambios en el correo electrónico:
{% snapshot customers_email_snapshot %}
{%
set config(
target_schema='snapshots',
unique_key='customer_id',
strategy='check',
check_cols=['email'],
invalidate_hard_deletes=True
)
%}
SELECT * FROM {{ source('customers') }}
{% endsnapshot %}
- Ejecuta
dbt snapshotpara registrar el estado inicial.
dbt snapshot
- Simula una actualización de correo electrónico en la tabla de origen.
A continuación, actualizaremos nuestra tabla original modificando la información de un cliente para simular un cambio en los datos.
UPDATE customers
SET email = 'alice.tan@example.com', updated_at = '2025-07-02 09:00:00'
WHERE customer_id = 1;
- Ejecuta de nuevo
dbt snapshotpara capturar el cambio.
dbt snapshot
- Consulta la tabla de instantáneas.
Para ver las diferencias y los cambios realizados en los datos, tendrás que consultar la tabla de instantáneas. La tabla debe mostrar ambas versiones de la dirección de correo electrónico con sus respectivos periodos de validez:
SELECT customer_id, email, dbt_valid_from, dbt_valid_to
FROM snapshots.customers_email_snapshot
ORDER BY customer_id, dbt_valid_from;
Este proceso garantiza que conserves un historial completo de los cambios realizados en las actualizaciones por correo electrónico, lo cual es fundamental para las auditorías del RGPD, el seguimiento del historial de contactos o el análisis de la asistencia al cliente.
Configuración y gestión avanzadas
Una gestión eficaz de la configuración permite a los equipos ampliar las implementaciones de instantáneas en distintos proyectos y entornos sin problemas.
1. Configuración a nivel de proyecto y de recursos
- Configuración a nivel de proyecto: Utiliza
dbt_project.ymlpara establecer configuraciones de instantáneas predeterminadas, como el esquema de destino o las materializaciones, aplicables a todas las instantáneas. - Configuración a nivel de recursos: Anula la configuración dentro de archivos SQL de instantáneas individuales para requisitos específicos, lo que garantiza la flexibilidad.
2. Personalización de campos de metadatos
De forma predeterminada, dbt crea los campos « dbt_valid_from » y « dbt_valid_to ». Puedes cambiarles el nombre utilizando las opciones de configuración « valid_from » y « valid_to » si las normas de tu equipo exigen convenciones de nomenclatura diferentes para mayor claridad en las herramientas de BI o de gobernanza de datos.
3. Migración de configuraciones de instantáneas heredadas
Las migraciones pueden causar algunas discrepancias si no se gestionan correctamente. A continuación, se indican algunos aspectos que debes tener en cuenta al migrar tus configuraciones de instantáneas:
- Identificar definiciones de instantáneas heredadas que utilizan estilos de bloque de configuración obsoletos.
- Refactorizar a configuraciones basadas en YAML si utilizas versiones modernas de dbt para mantener la coherencia.
- Validar la corrección:
- Ejecuta instantáneas en entornos de prueba.
- Compara los resultados antes de desactivar las instantáneas heredadas.
- Desmantelamiento: Eliminar los archivos de instantáneas antiguos y ajustar la documentación en consecuencia.
4. Integración con otras herramientas
Los cambios en los datos se pueden rastrear al unísono con las instantáneas de dbt.
Por ejemplo:
- Herramientas de BI (por ejemplo, Power BI, Tableau): Crea visualizaciones temporales que muestren los cambios en los atributos a lo largo del tiempo.
- Plataformas de observabilidad (por ejemplo, Monte Carlo, Datafold): Supervisa la actualidad de los datos y la integridad histórica.
- Catálogos de datos (por ejemplo, Alation, Collibra): Incluye tablas de historial de instantáneas como artefactos de linaje documentados para garantizar el cumplimiento normativo.
Prácticas recomendadas para la implementación en producción
La implementación de instantáneas dbt en producción requiere un diseño cuidadoso para garantizar el rendimiento, la facilidad de mantenimiento y el valor empresarial.
Es mejor seguir estas recomendaciones:
1. Casos de uso óptimos y selección de tablas
- Prioriza las tablas de dimensiones con atributos que cambian lentamente, como perfiles de clientes, datos maestros de productos y contratos con proveedores.
- Evita las tablas transaccionales (por ejemplo, líneas de pedido) con inserciones y actualizaciones de alta frecuencia, a menos que sea necesario debido a problemas de crecimiento rápido del almacenamiento.
2. Técnicas de optimización del rendimiento
En la producción, querrás optimizar tus datos para que los cambios en los mismos puedan rastrearse de manera eficiente sin afectar tu producto.
Aquí tienes algunos consejos:
- Indexación: Añade índices en las columnas «
unique_key» y «validity» para acelerar las consultas. - Partición: Divide las tablas de instantáneas por fecha para optimizar el rendimiento del escaneo.
- Agrupación (específica del almacén): Utiliza claves de agrupación (por ejemplo, en BigQuery) en campos de alta cardinalidad para mejorar la velocidad de las consultas de filtrado.
3. Prácticas de mantenimiento y supervisión
- Programación: Ejecuta instantáneas durante las horas de menor actividad para minimizar el impacto en los costes informáticos.
- Seguimiento: Configura alertas para fallos de instantáneas en dbt Cloud o en tu herramienta de orquestación.
- Comprobaciones de actualidad de los datos: Utiliza pruebas dbt o herramientas de observabilidad para validar la frescura de los datos de las instantáneas.
- Análisis del almacenamiento: Revisa periódicamente el tamaño de las tablas de instantáneas y elimina los datos históricos si el negocio lo permite.
4. Errores comunes
El uso de un identificador de fila no único ( unique_key ) provoca un versionado incorrecto de las filas. Comprueba siempre la lógica de unicidad antes de la implementación.
La sobrecarga de instantáneas también puede producirse cuando almacenar cambios históricos innecesarios (por ejemplo, columnas con actualizaciones frecuentes de marcas de tiempo) puede aumentar rápidamente los costes de almacenamiento.
Desafíos comunes y soluciones
El uso de instantáneas en dbt puede plantear algunos retos técnicos específicos:
1. Colisiones de claves únicas
Problema: Filas duplicadas en la instantánea debido a claves únicas mal definidas.
Solución:
- Valida la unicidad mediante pruebas dbt antes de implementar la instantánea.
- Concatena varios campos para garantizar la unicidad compuesta cuando sea necesario.
2. Rendimiento de consultas temporales
Problema: Consultas lentas al analizar datos históricos.
Solución:
- Utiliza eficazmente la partición y la agrupación de almacenes.
- Filtra siempre las consultas por
dbt_valid_fromo rangos de fechas para reducir el volumen de datos escaneados.
3. Solución de problemas Errores en la ejecución de instantáneas
Los problemas más comunes incluyen:
- Esquema incorrecto o permisos de base de datos incorrectos.
- Los cambios en el esquema de la tabla de origen (por ejemplo, columnas eliminadas) rompen las sentencias de instantáneas (
SELECT). - Errores de sintaxis en los bloques de configuración de instantáneas.
Soluciones:
- Utiliza
dbt debugpara validar la conexión y la configuración. - Implementar pruebas de CI en dbt para detectar errores antes de la implementación.
- Revisa los registros de ejecución de dbt para obtener mensajes de error detallados.
Conclusión
Las instantáneas de dbt permiten a los equipos de análisis crear conjuntos de datos históricos sólidos con una inversión mínima en ingeniería, lo que facilita el análisis del cumplimiento normativo. Si te interesa obtener más información sobre la TDC, nuestro curso sobre Introducción a la TDC. Para más información y guías, consulta nuestra Introducción al paquete dbt-utils y Tutorial de dbt.
Preguntas frecuentes sobre instantáneas de dbt
¿Cómo configuro las instantáneas de dbt para diferentes estrategias de datos?
Para configurar instantáneas de dbt para diferentes estrategias de datos, elige entre las estrategias de marca de tiempo y de comprobación en la configuración de instantáneas. Para la estrategia de marca de tiempo, especifica strategy='timestamp' y proporciona una columna updated_at que se actualice de forma fiable ante cualquier cambio. Para la estrategia de comprobación, utiliza strategy='check' y define check_cols con la lista de columnas que deseas supervisar para detectar cambios.
¿Cuáles son las mejores prácticas para programar instantáneas de dbt?
Programa instantáneas durante las horas de menor actividad, alinea su frecuencia con las tasas de cambio de datos, utiliza coordinadores como Airflow o dbt Cloud, ejecútalas por separado de las transformaciones pesadas y supervisa regularmente si hay errores.
¿Cómo puedo personalizar los campos de metadatos en las instantáneas de dbt?
Puedes cambiar el nombre de los campos de metadatos predeterminados, como dbt_valid_from y dbt_valid_to, en la configuración de la instantánea y añadir metadatos personalizados utilizando la configuración meta en tu YAML para alinearlos con tus estándares de datos.
¿Cuáles son las diferencias entre las estrategias de marca de tiempo y de verificación en las instantáneas de dbt?
Timestamp utiliza una columna updated_at para detectar cualquier cambio, mientras que check compara columnas específicas en busca de diferencias; timestamp es más sencillo, mientras que check ofrece más control cuando no existe una marca de tiempo fiable.
¿Cómo gestiono los registros eliminados en las instantáneas de dbt?
Utiliza invalidate_hard_deletes=True para que dbt marque los registros que faltan con una fecha de finalización dentro de su período de validez, capturando de forma eficaz las eliminaciones en tu historial de instantáneas.

Soy Austin, bloguero y escritor técnico con años de experiencia como científico de datos y analista de datos en el sector sanitario. Empecé mi andadura tecnológica con una formación en biología, y ahora ayudo a otros a hacer la misma transición a través de mi blog tecnológico. Mi pasión por la tecnología me ha llevado a escribir para decenas de empresas de SaaS, inspirando a otros y compartiendo mis experiencias.