Primeros pasos en la arquitectura no transaccional

1

Objetivos y presentación del proyecto

2

Aprende qué es un Data Warehouse

3

Bases de datos columnares y arquitectura orientada a optimización de consultas

4

¿Cómo funciona AWS Redshift?

Configura tu entorno de trabajo para Redshift

5

Creando nuestro entorno de trabajo en AWS

6

Configura tu primer cluster

7

Consumiendo Redshift: empieza la magia

8

Sentencias SQL en Redshift

Cómo diseñar tu base de datos para mejorar su desempeño

9

¿Qué es la compresión en Redshift?

10

Algoritmos de compresión con Redshift

11

Aplicando algoritmos de compresión

12

Análisis de desempeño con diferentes tipos de compresión

13

Estilos de distribución con Redshift

14

Evaluando los estilos de distribución

15

Llaves de ordenamiento para optimizar nuestras consultas

16

Aplicando ordenamiento de columnas

17

Evaluando algoritmos de ordenamiento

18

Buenas prácticas para diseñar tablas en Redshift

19

Tipos de datos en AWS Redshift

20

Reto: mejora el desempeño de tu base de datos

Manipular enormes cantidades de datos

21

Olvídate de los insert, el copy llego para quedarse

22

Cargando archivos tipo JSON

23

El comando copy a fondo

24

Manifiestos y uso de COMPUPDATE para carga con compresión automática

25

Métodos de carga alternativos al comando copy

26

¿Cómo ejecutar sentencias UPDATE y DELETE?

27

¿Cómo mantener el desempeño de tu base de datos?

28

Estadísticas y limpieza de las tablas

Buenas prácticas para diseñar y ejecutar consultas en tu base de datos

29

Agrupamiento, ordenamiento y subqueries

30

¿Qué es y cómo interpretar un explain plan?

Análisis de comportamiento y descarga de datos con Redshift

31

¿Cómo descargar datos eficientemente con UNLOAD?

32

Otras tablas útiles de Redshift para entender el comportamiento de nuestros datos

Conclusiones

33

Próximos pasos con AWS Redshift

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Cómo ejecutar sentencias UPDATE y DELETE?

26/33
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Les comparto mis querys:

SELECT salesid, pricepaid, commission
FROM sales s
WHERE eventid IN (
	SELECT eventid
	FROM event e
	WHERE eventname = 'Beck'
);

CREATE table sales_auxiliar AS (
	SELECT salesid, pricepaid * 2 pricepaid , commission * 2 commission 
	FROM sales s
	WHERE eventid IN (
		SELECT eventid
		FROM event e
		WHERE eventname = 'Beck'
	)
);

UPDATE sales
SET pricepaid =sa.pricepaid
FROM sales_auxiliar sa
WHERE sales.salesid = sa.salesid;

DELETE FROM sales
USING sales_auxiliar
WHERE sales.salesid = sales_auxiliar.salesid;


DROP TABLE sales_auxiliar;

CREATE table sales_auxiliar AS (
	SELECT *
	FROM sales s
	WHERE eventid IN (
		SELECT eventid
		FROM event e
		WHERE eventname = 'Macbeth'
	)
);

INSERT INTO sales (SELECT * FROM sales_auxiliar);

Para hacer update o delete en Redshift, la mejor practica es crear una tabla auxiliar con todos los datos involucrados en el borrado o actualización, para después hacer utilizar esa nueva tabla para hacer una sola operación cruzada con la tabla original.

  1. cargar en tabla auxiliar los datos actualizados
  2. borrar los datos de la tabla oficial, con ayuda de la tabla auxiliar (uso por ejemplo del id)
  3. Insertar en la tabla oficial los datos de la tabla auxiliar
SELECT * FROM sales LIMIT 10;

SELECT *
FROM sales s 
WHERE eventid ;

SELECT *
FROM event e 
WHERE eventname  = 'Beck';

SELECT eventid 
FROM event e 
WHERE eventname  = 'Beck';

SELECT *
FROM sales s 
WHERE eventid in(
	SELECT eventid 
	FROM event e 
	WHERE eventname  = 'Beck'
) ;

DROP TABLE sales_auxiliar;


CREATE TABLE sales_auxiliar AS (
	SELECT salesid, pricepaid  * 2 pricepaid, commission * 2 commission 
	FROM sales s 
	WHERE eventid in(
		SELECT eventid 
		FROM event e 
		WHERE eventname  = 'Beck'
)
);

SELECT * 
FROM sales_auxiliar
LIMIT 10;

SELECT * 
FROM sales_auxiliar
WHERE salesid = 137519
LIMIT 10; --448

SELECT * 
FROM sales
WHERE salesid = 137519
LIMIT 10; --448

UPDATE sales 
SET pricepaid = sa.pricepaid
FROM sales_auxiliar sa
WHERE sales.salesid = sa.salesid;

DELETE FROM sales 
USING sales_auxiliar
WHERE sales.salesid = sales_auxiliar.salesid;

DROP TABLE sales_auxiliar;

CREATE TABLE sales_auxiliar AS (
	SELECT * 
	FROM sales s 
	WHERE eventid in(
		SELECT eventid 
		FROM event e 
		WHERE eventname  = 'Macbeth'));
	
DELETE FROM sales 
USING sales_auxiliar
WHERE sales.salesid = sales_auxiliar.salesid;

INSERT INTO sales (SELECT * FROM sales_auxiliar);

SELECT eventid 
FROM event e 
WHERE eventname  = 'Macbeth';

SELECT * 
	FROM sales s 
	WHERE eventid in(
		SELECT eventid 
		FROM event e 
		WHERE eventname  = 'Macbeth');

SELECT * 
FROM sales_auxiliar
WHERE salesid = 107121
LIMIT 10; --82, --12.3

SELECT * 
FROM sales
WHERE salesid = 107121
LIMIT 10; --82, --12.3
En Amazon Redshift, las sentencias `UPDATE` y `DELETE` son compatibles con el SQL estándar, pero debido a la naturaleza columnares de Redshift y su optimización para análisis de datos, es importante usarlas con cuidado para garantizar el rendimiento. ## **1. Ejecución de sentencias** `UPDATE` ### **Sintaxis básica** UPDATE table\_name SET column\_name = new\_value WHERE condition; ### **Ejemplo** Actualizar el correo electrónico de un cliente en la tabla `customers`: UPDATE customers SET email = 'new\[email protected]' WHERE customer\_id = 123; ### **Buenas prácticas al usar** `UPDATE` **en Redshift**: 1. **Usar condiciones específicas (**`WHERE`**)**: * Siempre filtra los registros que deseas actualizar para evitar modificar toda la tabla accidentalmente. 2. **Evitar actualizaciones frecuentes**: * Redshift no optimiza las actualizaciones tanto como otras bases de datos relacionales. Las actualizaciones frecuentes pueden fragmentar los bloques y degradar el rendimiento. 3. **Alternativa eficiente: Usar tablas temporales**: * Crea una nueva tabla con los valores actualizados y reemplaza la original. Esto es más eficiente para actualizar grandes cantidades de datos. **Ejemplo alternativo**: CREATE TABLE customers\_temp AS SELECT customer\_id, CASE WHEN customer\_id = 123 THEN 'new\[email protected]' ELSE email END AS email FROM customers; \-- Reemplazar la tabla original DROP TABLE customers; ALTER TABLE customers\_temp RENAME TO customers; ## **2. Ejecución de sentencias** `DELETE` ### **Sintaxis básica** DELETE FROM table\_name WHERE condition; ### **Ejemplo** Eliminar un cliente de la tabla `customers`: DELETE FROM customers WHERE customer\_id = 123; ### **Buenas prácticas al usar** `DELETE` **en Redshift**: 1. **Siempre usa una condición (**`WHERE`**)**: * Asegúrate de que la eliminación esté restringida a los registros necesarios. 2. **Evitar eliminar grandes volúmenes de datos**: * Las eliminaciones masivas pueden generar espacio desperdiciado en bloques de almacenamiento. * Usa el comando `VACUUM` después de eliminar para reorganizar la tabla y recuperar espacio. 3. **Alternativa eficiente: Usar tablas filtradas**: * Similar al enfoque de `UPDATE`, filtra los datos en una tabla temporal y reemplaza la original. **Ejemplo alternativo**: CREATE TABLE customers\_temp AS SELECT \* FROM customers WHERE customer\_id != 123; \-- Reemplazar la tabla original DROP TABLE customers; ALTER TABLE customers\_temp RENAME TO customers; ## **3. Reorganización de la tabla (**`VACUUM` **y** `ANALYZE`**)** Después de realizar `UPDATE` o `DELETE`, es importante ejecutar comandos para optimizar la tabla: * `VACUUM`: Reorganiza los datos para reducir la fragmentación. * `ANALYZE`: Actualiza las estadísticas de la tabla para mejorar el rendimiento de las consultas. **Ejemplo**: VACUUM FULL customers; ANALYZE customers; ### **Consideraciones adicionales** * **Optimización orientada a lotes**: Si necesitas realizar cambios frecuentes, considera realizar actualizaciones o eliminaciones en lotes grandes, en lugar de cambios individuales. * **Evitar transacciones prolongadas**: Redshift no maneja bloqueos como otras bases de datos, pero las transacciones largas pueden consumir recursos innecesariamente. * **Pruebas previas**: Antes de realizar una eliminación o actualización masiva, prueba tu consulta con un `SELECT` para verificar los resultados. Con estas prácticas, puedes usar `UPDATE` y `DELETE` de manera eficiente en Amazon Redshift.

Excelente