Explorando Time Travel en Azure Databricks
Bienvenidos/as a un nuevo artículo en el mejor blog de Data & Cloud. En el post de hoy os contamos cómo utilizar de modo básico el historial de versiones y la funcionalidad de «Time Travel», a través de un ejemplo práctico. Nuestro escenario se centra en una tabla de usuarios en Delta Lake, donde realizaremos operaciones merge
como upserts
y exploraremos cómo revertir la tabla a una versión anterior.
Delta Lake en Databricks destaca por su flexibilidad y control de los datos, ofreciéndonos características como el control de versiones y el historial de transacciones, esenciales en entornos empresariales donde la integridad y trazabilidad de los datos, son una prioridad.
La capacidad de «Time Travel» en tablas Delta permiten acceder y restaurar versiones anteriores de datos, y resultan cruciales en la recuperación de datos, auditorías y análisis históricos.
A continuación, los pasos y el código necesario, vamos allá.
Paso 1: Configuración de Azure Databricks
El primer paso, suponiendo que ya tengas una cuenta en Azure Databricks y un clúster configurado, es abrir un notebook en Databricks. Este será el punto de partida para todo nuestro trabajo. Si no dispones de alguno de estos requisitos, los siguientes enlaces pueden ayudarte:
Obtener una cuenta gratuita en Azure Databricks
Configurar el clúster y crear un nuevo notebook
Paso 2: Crear una tabla de ejemplo
Creado nuestro notebook, utilizaremos Spark SQL para crear una tabla delta de ejemplo en Databricks. Abre una celda en tu notebook y ejecuta el siguiente código:
%sql
CREATE TABLE IF NOT EXISTS usuarios (
id INT,
email STRING,
nombre STRING
)
USING DELTA;
Esta instrucción crea una tabla llamada usuarios
con tres columnas: id
, email
y nombre
. Estamos utilizando el formato Delta , que es el estándar en Databricks y es el que nos va a facilitar operaciones avanzadas como los upserts.
Paso 3: Insertar datos de ejemplo
Para tener algo con lo que trabajar, insertemos algunos datos en nuestra tabla:
%sql
INSERT INTO usuarios VALUES (1, 'usuario1@example.com', 'Juan');
INSERT INTO usuarios VALUES (2, 'usuario2@example.com', 'Ana');
Mostramos la inserción:
%sql
SELECT * FROM usuarios
Paso 4: Realizamos un upsert
Las tablas Delta en Databricks, soportan operaciones tipo «merge» que pueden usarse para realizar upserts. Si no estás familiarizado con este tipo de operaciones, un upsert es básicamente una operación de verificación de existencia del registro, si un registro ya existe, entonces se actualiza (update) y si no, se inserta (insert). En este caso, vamos a actualizar el nombre del usuario con id = 2
y agregar un nuevo usuario con id = 3
.
Primero, creamos una tabla temporal con los nuevos datos:
%sql
CREATE OR REPLACE TEMPORARY VIEW nuevos_datos AS
SELECT 2 as id, 'usuario2@example.com' as email, 'Ana María' as nombre
UNION ALL
SELECT 3 as id, 'usuario3@example.com' as email, 'Luis' as nombre;
Realicemos ahora la operación de upsert (merge) en la tabla usuarios
usando la vista nuevos_datos
en la que disponemos de la actualización de Ana y la inserción de Luis:
%sql
MERGE INTO usuarios
USING nuevos_datos
ON usuarios.id = nuevos_datos.id
WHEN MATCHED THEN
UPDATE SET usuarios.nombre = nuevos_datos.nombre
WHEN NOT MATCHED THEN
INSERT (id, email, nombre) VALUES (nuevos_datos.id, nuevos_datos.email, nuevos_datos.nombre);
Paso 5: Verificamos merge
Nos aseguraremos de la inserción y actualización realizada en la tabla de usuarios
con:
%sql
SELECT * FROM usuarios;
Esto nos muestra la tabla usuarios
con el usuario id = 2
actualizado y el nuevo usuario id = 3
añadido.
Paso 6. Control de versiones e historial de transacciones
Ahora, veamos cómo gestionar el control de versiones y el historial de transacciones en la tabla delta :
Paso 6.1. Revisando el historial de transacciones
Para ver el historial de transacciones de nuestra tabla usuarios
, podemos usar el comando DESCRIBE HISTORY
:
%sql
DESCRIBE HISTORY usuarios;
Este comando mostrará un historial de todas las operaciones realizadas en la tabla usuarios
, incluyendo los cambios realizados durante las operaciones de upsert , tal como podemos ver en la siguiente imagen:
Para conocer en mayor profundidad el esquema del historial y las claves de métricas de operación puedes utilizar este enlace
6.2. Acceso a versiones anteriores de los datos (Time Travel)
El «Time Travel» de Delta Lake admite la consulta de versiones de tabla anteriores basadas en la marca de tiempo o la versión de tabla (como se registra en el registro de transacciones).Esta funcionalidad es extremadamente útil para casos de uso como la recuperación de datos, auditorías y análisis de datos históricos, corregir errores en los datos, o proporcionar aislamiento de instantáneas a un conjunto de consultas para tablas que cambian rápidamente. De forma práctica permite elegir ver una versión específica de la tabla o la instantánea en un momento dado en el tiempo.
Para consultar una versión específica de la tabla , podemos utilizar el siguiente código:
%sql
SELECT * FROM usuarios VERSION AS OF 2;
En este ejemplo, 2
es el número de versión de la tabla usuarios
que deseas consultar.
También podemos consultar la tabla en un punto específico en el tiempo:
%sql
SELECT * FROM usuarios TIMESTAMP AS OF '2024-01-27 11:37:00';
En este ejemplo, se consulta el estado de la tabla usuarios
tal como estaba el 27 de enero de 2024 a las 11:37:00
6.3. Recuperando versiones anteriores de los datos
La característica de «Time Travel» de Delta no solo es útil para consultas retrospectivas, sino también para la restauración de datos. En nuestro ejemplo restauraremos la tabla usuarios
a su estado inicial, consultando la versión deseada y utilizando los datos recuperados para sobrescribir o actualizar la tabla actual.
El proceso implica dos pasos principales: primero, identificar la versión específica de la tabla a la que quieres volver, y segundo, realizar la restauración propiamente dicha.
6.4. Identificar la versión a la que revertir
Antes de revertir la tabla, necesitas saber a qué versión quieres volver. Puedes hacerlo consultando el historial de la tabla para encontrar la versión deseada:
%sql
DESCRIBE HISTORY usuarios;
Este comando tal como vimos en punto 6.1 muestra un historial de todas las versiones de la tabla, incluyendo las operaciones realizadas en cada versión. Cada entrada en historial en historial tiene un número de versión asociado, trataremos de llevarlo a la versión 2, punto inmediatamente anterior a la realización del MERGE.
6.5. Realizando la reversión
Una vez que hayas identificada la versión deseada, usaremos el «Time Travel» para revertir la tabla a esa versión específica. Para volver a la versión 2, crearemos una vista temporal o una nueva tabla con el estado deseado de la tabla usuarios
:
%sql
CREATE OR REPLACE TEMPORARY VIEW usuarios_revertidos AS
SELECT * FROM usuarios VERSION AS OF 2;
Este comando crea una vista temporal usuarios_revertidos
que refleja el estado de la tabla usuarios
en la versión especificada (en este caso, la versión 1). Este paso no afecta a la tabla usuarios
original ni a su historial de versiones.
Luego, podemos utilizar esa vista para reemplazar los datos actuales en la tabla usuarios
:
%sql
DELETE FROM usuarios;
INSERT INTO usuarios
SELECT * FROM usuarios_revertidos;
La versión restaurada se ve como la inicial, al insertar los registros de Ana y Juan:
Repasemos, hemos eliminado todos los datos actuales en la tabla usuarios
y luego hemos insertado los datos desde la vista usuarios_revertidos
, consiguiendo la «restauración» del estado de la tabla usuarios
al que tenía en la versión 2. Todos estos pasos se registran como nuevas transacciones en el historial de la tabla, tal como vemos a continuación
Esta capacidad de viajar en el tiempo y de acceder al historial detallado de transacciones sitúa a Delta en Databricks como una herramienta poderosa para la gestión de datos en el mundo empresarial, donde la precisión, la integridad y la capacidad de rastrear y revertir cambios en los datos son esenciales para el éxito operativo y la toma de decisiones informada.
Conclusión
En nuestra exploración de Databricks, hemos podido ver que esta herramienta provee funcionalidades cruciales para la trazabilidad y auditoría. El control de versiones y las capacidades de ‘Time Travel’ destacan, no solo por facilitar la recuperación de datos, sino por ofrecer una protección y seguimiento completos, esenciales para la seguridad de los datos.
Sin embargo, aprovechar al máximo estas herramientas en Databricks, y mantener un equilibrio entre rendimiento y gestión de cambios, implica importantes desafíos como la optimización de consultas, la adecuación de recursos del sistema son clave para preservar la eficiencia y al mismo tiempo, una gestión rigurosa del control de versiones asegura la integridad y consistencia de los datos. Por ello una monitorización constante y el toque justo de ajustes estratégicos, nos permitirán utilizar estas potentes funcionalidades sin sacrificar eficiencia y logrando así un balance óptimo entre seguridad avanzada y rendimiento operativo.
En nuestros siguientes posts seguiremos explorando las capacidades de Delta Lake en Databricks,si te ha parecido interesante, te recomendamos los siguientes artículos:
Power BI Copilot: Innovando el Análisis de Datos con Inteligencia Artificial
Parameter Sensitive Plan para SQL Server 2022
Y si quieres llevar el análisis de tus datos al siguiente nivel, contacta con nosotros.