Actualización Eficiente de Datos en Repsheet con Tablas Auxiliares
Clase 26 de 33 • Curso de AWS Redshift para Manejo de Big Data
Resumen
¿Cómo actualizar una tabla en Repsheet de manera eficiente?
Actualizar datos en Repsheet puede parecer una tarea complicada debido a su estructura basada en columnas. Sin embargo, aunque no sea una base de datos transaccional típica, existen métodos para realizar actualizaciones de forma eficiente y sin comprometer el rendimiento.
¿Cuál es el problema con las actualizaciones tradicionales?
Repsheet se caracteriza por ser una base de datos columnar, lo que significa que actualizar registros fila a fila o transacción a transacción puede ser un proceso extremadamente lento y perjudicial. Cada operación de este tipo involucra múltiples bloques de datos, afectando negativamente la eficiencia del sistema.
¿Cómo crear una tabla auxiliar?
El enfoque recomendado para actualizar registros consiste en utilizar una tabla auxiliar. Esta tabla contendrá los datos corregidos que planeas actualizar en tu sistema principal:
CREATE TABLE sales_aux AS
SELECT sales_id, price_paid * 2 AS price_paid, commission * 2 AS commission
FROM sales
WHERE event_id = (SELECT event_id FROM event WHERE event_name = 'BEC');
En este fragmento de código SQL, realizamos una selección de las filas que deseamos actualizar. Multiplicamos los valores por dos para corregir datos incorrectos y guardamos estos registros en una tabla auxiliar llamada sales_aux
.
¿Cómo actualizar registros usando una única operación?
Una vez creada la tabla auxiliar con los datos corregidos, podemos realizar la actualización real sin afectar demasiado al sistema:
UPDATE sales
SET price_paid = sa.price_paid
FROM sales_aux sa
WHERE sales.sales_id = sa.sales_id;
Esta operación actualiza todos los precios en la tabla original alineándose con los datos corregidos en la tabla auxiliar. Al realizar una única operación de UPDATE
, aprovechamos las optimizaciones internas de Repsheet.
¿Qué hacer cuando no se conocen las columnas a actualizar?
Cuando no se sabe qué columnas han cambiado, la mejor práctica es borrar y volver a insertar los registros necesarios. Este método asegura que todos los datos sean actualizados correctamente sin conocer los detalles específicos de los cambios:
-- Borrar registros anteriores
DELETE FROM sales
USING sales_aux sa
WHERE sales.sales_id = sa.sales_id;
-- Insertar los datos nuevos
INSERT INTO sales
SELECT * FROM sales_aux;
En este flujo, primero eliminamos los registros antiguos en la tabla principal que coincidan con las entradas en la tabla auxiliar. Después, simplemente volvemos a insertar esos mismos registros desde la tabla auxiliar, actualizando efectivamente todos los datos.
¿Por qué usar esta metodología?
El enfoque de las tablas auxiliares y las operaciones de inserción/eliminación en bloque es crucial para mantener la integridad y eficiencia en bases de datos columnar. Este método no solo mejora el rendimiento, sino que también facilita las actualizaciones en gran escala, haciéndolo ideal para data warehouses. Usar estas técnicas puede ahorrarte tiempo y recursos significativos al garantizar que el sistema funcione de manera óptima.
¡Continúa explorando estas prácticas para sacar el máximo provecho de tus sistemas de datos y lograr un aprendizaje continuo!