Snapshots en DBT: Control de versionado de registros
Introducción
- Las dimensiones SCD2 se construyen normalmente con modelos complejos para simular un UPDATE.
- DBT ofrece una funcionalidad nativa llamada snapshots para controlar el versionado de registros de manera más automática y confiable.
- Los snapshots permiten mantener un historial completo de los cambios en las tablas de dimensión, simplificando la gestión de datos históricos.
Conceptos clave
- Business key: identificador único de la entidad (por ejemplo, employee_id).
- Campo de comparación: DBT compara los registros mediante un campo hash o conjunto de campos relevantes (por ejemplo, sk_employee) para detectar cambios.
- Comportamiento:
- Si DBT detecta diferencias en un registro existente:
- Desactiva el registro antiguo (valid_to se completa).
- Inserta un nuevo registro con los datos actualizados.
- Esto permite que la dimensión mantenga todo el histórico automáticamente, sin necesidad de construir queries complejas de delete + insert.
Ejemplo práctico: dimensión empleado
En la imagen anterior se generó la query contra el origen. DBT se encargará de comparar los datos devueltos por la query con los registros existentes en la dimensión.
- La clave única (business key) es employee_id.
- El campo utilizado para detectar diferencias es sk_employee, un hash generado internamente.
- Si DBT detecta diferencias, actualizará el registro en la base de datos, desactivará el registro anterior e insertará un nuevo registro.
Para ejecutar los snapshots, se utiliza el siguiente comando:
DBT procesará todos los snapshots, generando y almacenando los registros correspondientes según los cambios detectados.
- Se procederá a actualizar el campo reports_to en la capa Bronze, que sirve como origen de todos los datos.
- A continuación, se ejecuta el siguiente comando para procesar los snapshots:
- Esto permitirá que DBT detecte cambios en el origen y actualice los registros históricos según corresponda.
- Se ha insertado un nuevo registro, realizando previamente la desactivación del registro anterior para mantener el historial de cambios.
Resumen sobre SCD2 y snapshots en DBT:
Para implementar SCD2, se pueden utilizar snapshots en lugar de los modelos incrementales de DBT.
- Los snapshots son más sencillos de usar, pero ofrecen menor control y permiten aplicar menos filtros.
- En sistemas que cobran por ejecución de queries, como Redshift, Athena o BigQuery, esta limitación puede generar costes más altos, ya que las consultas comparan toda la tabla de origen y destino.
- Con los modelos incrementales, es posible aplicar filtros (por ejemplo, por fecha) para reducir el volumen de datos procesados y optimizar costes.
Francisco Rodriguez Alfaro