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

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Métodos de carga alternativos al comando copy

25/33
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Deep Copy

Una copia profunda recrea y vuelve a llenar una tabla mediante una inserción masiva, que ordena automáticamente la tabla. Si una tabla tiene una región grande sin clasificar, una copia profunda es mucho más rápida que una aspiradora. La compensación es que no debe realizar actualizaciones simultáneas durante una operación de copia profunda a menos que pueda rastrearla y mover las actualizaciones delta a la nueva tabla después de que se haya completado el proceso. Una operación de VACÍO admite actualizaciones simultáneas de forma automática.

Puede elegir uno de los siguientes métodos para crear una copia de la tabla original:

  • Utilice la tabla DDL original.

Si el DDL CREATE TABLE está disponible, este es el método más rápido y preferido. Si crea una tabla nueva, puede especificar todos los atributos de tabla y columna, incluidas la clave principal y las claves externas.

  • Utilice CREAR TABLA COMO.

Si el DDL original no está disponible, puede usar CREATE TABLE LIKE para recrear la tabla original. La nueva tabla hereda los atributos encoding, distkey, sortkey y notnull de la tabla principal. La nueva tabla no hereda los atributos de clave principal y clave externa de la tabla principal, pero puede agregarlos usando ALTER TABLE.

  • Cree una tabla temporal y trunque la tabla original.

Si necesita conservar la clave principal y los atributos de clave externa de la tabla principal, o si la tabla principal tiene dependencias, puede usar CREATE TABLE … AS (CTAS) para crear una tabla temporal, luego truncar la tabla original y completar de la tabla temporal.

El uso de una tabla temporal mejora el rendimiento significativamente en comparación con el uso de una tabla permanente, pero existe el riesgo de perder datos. Una tabla temporal se elimina automáticamente al final de la sesión en la que se crea. TRUNCATE se compromete inmediatamente, incluso si está dentro de un bloque de transacción. Si TRUNCATE tiene éxito pero la sesión finaliza antes de que finalice el INSERT subsiguiente, los datos se pierden. Si la pérdida de datos es inaceptable, use una tabla permanente.

Para realizar una copia profunda utilizando la tabla original DDL

  1. (Opcional) Vuelve a crear la tabla DDL ejecutando un script llamado v_generate_tbl_ddl.

  2. Crea una copia de la tabla usando el CREATE TABLE DDL original.

  3. Utilisa una instrucción INSERT INTO … SELECT para completar la copia con datos de la tabla original.

  4. Suelta la mesa original.

  5. Utilisa una instrucción ALTER TABLE para cambiar el nombre de la copia al nombre de la tabla original.

El siguiente ejemplo realiza una copia profunda en la tabla SALES usando un duplicado de SALES llamado SALESCOPY.

create table salescopy ( … );
insert into salescopy (select * from sales);
drop table sales;
alter table salescopy rename to sales;

Para realizar una copia profunda usando CREATE TABLE LIKE

  1. Cree una nueva tabla usando CREATE TABLE LIKE.

  2. Utilice una instrucción INSERT INTO … SELECT para copiar las filas de la tabla actual a la nueva tabla.

  3. Suelta la tabla actual.

  4. Utilice una instrucción ALTER TABLE para cambiar el nombre de la nueva tabla al nombre de la tabla original.

  5. El siguiente ejemplo realiza una copia profunda en la tabla SALES usando CREATE TABLE LIKE.

create table likesales (like sales);
insert into likesales (select * from sales);
drop table sales;
alter table likesales rename to sales;

Para realizar una copia en profundidad creando una tabla temporal y truncando la tabla original

  1. Utilice CREATE TABLE AS para crear una tabla temporal con las filas de la tabla original.

  2. Truncar la tabla actual.

  3. Utilice una instrucción INSERT INTO … SELECT para copiar las filas de la tabla temporal a la tabla original.

  4. Suelta la mesa temporal.

El siguiente ejemplo realiza una copia profunda en la tabla SALES creando una tabla temporal y truncando la tabla original:

create temp table salestemp as select * from sales;
truncate sales;
insert into sales (select * from salestemp);
drop table salestemp;
SELECT * FROM estudiante;

INSERT INTO estudiante VALUES
(5, 'Brandon', 'Huertas', 24, '2020-01-01'),
(6, 'Cristian', 'Salas', 30, '2020-03-01'),
(7, 'Holman', 'Capos', 25, '2020-02-01'),
(8, 'Natalia', 'Montenegro', 25, '2020-04-01');

-- bulk insert, datos por lotes
SELECT e.eventname, e.starttime, sum(pricepaid) pricepaid, sum(commission) commission 
FROM sales s 
INNER JOIN event e
ON s.eventid = e.eventid 
GROUP BY e.eventname , e.starttime;

CREATE TABLE total_price_by_event AS (
SELECT e.eventname, e.starttime, sum(pricepaid) pricepaid, sum(commission) commission 
FROM sales s 
INNER JOIN event e
ON s.eventid = e.eventid 
GROUP BY e.eventname , e.starttime
);

SELECT * FROM total_price_by_event;

-- deep copy
CREATE TABLE likesales (like sales);
INSERT INTO likesales (SELECT * FROM sales);
DROP TABLE sales;
ALTER TABLE likesales RENAME TO sales;

SELECT * FROM sales;

Buena clase

Acá les dejo unos querys.

INSERT INTO estudiante VALUES
(8, 'Juan', 'Perez', 31, '2020-03-22'),
(9, 'Maria', 'Lopez', 31, '2020-01-22'),
(10, 'Josue', 'Ramirez', 31, '2020-02-22');

--Bulk select/insert
CREATE TABLE total_price_by_event as (
	SELECT e.eventname, e.starttime, sum(pricepaid) pricepaid, sum(commission) commission
	FROM sales s
	INNER JOIN event e ON s.eventid = e.eventid
	GROUP BY e.eventname, e.starttime
);

SELECT *
FROM total_price_by_event;