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

Evaluando los estilos de distribución

14/33
Recursos

Aportes 11

Preguntas 4

Ordenar por:

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

Hola,

Les comparto R.A.G (Redshift Analyst Guide). Una guía de cosas que NO se recomienda hacer y buenas prácticas en Redshift 😃

The R.A.G

CREATE TABLE dist_key (columna int)
diststyle key distkey (columna);
INSERT INTO dist_key VALUES (10);

CREATE TABLE dist_even (columna int)
diststyle even;
INSERT INTO dist_even VALUES (10);

CREATE TABLE dist_all (columna int)
diststyle all;
INSERT INTO dist_all VALUES (10);

CREATE TABLE dist_auto (columna int);
INSERT INTO dist_auto VALUES (10);

SELECT *
FROM pg_catalog.svv_table_info
LIMIT 10;

SELECT *
FROM pg_catalog.svv_table_info
WHERE "table" LIKE '%dist%'
LIMIT 10;

SELECT *
FROM pg_table_def
WHERE tablename = 'users';

SELECT *
FROM pg_catalog.svv_diskusage 
LIMIT 10;

SELECT *
FROM pg_catalog.svv_diskusage 
WHERE "name" = 'users'
AND col = 0;

SELECT distinct slice, col, num_values, "minvalue", "maxvalue"
FROM pg_catalog.svv_diskusage 
WHERE "name" = 'users'
AND col = 0
AND num_values > 0
ORDER BY slice, col;

CREATE TABLE user_key_state distkey(state) AS (SELECT * FROM users)

SELECT distinct slice, col, num_values, "minvalue", "maxvalue"
FROM pg_catalog.svv_diskusage 
WHERE "name" = 'user_key_state'
AND col = 0
AND num_values > 0
ORDER BY slice, col;

CREATE TABLE user_even_state diststyle even AS (SELECT * FROM users)

SELECT distinct slice, col, num_values, "minvalue", "maxvalue"
FROM pg_catalog.svv_diskusage 
WHERE "name" = 'user_even_state'
AND col = 0
AND num_values > 0
ORDER BY slice, col;

CREATE TABLE user_all diststyle all AS (SELECT * FROM users)

SELECT distinct slice, col, num_values, "minvalue", "maxvalue"
FROM pg_catalog.svv_diskusage 
WHERE "name" = 'user_all'
AND col = 0
AND num_values > 0
ORDER BY slice, col;

svv_diskusage permite ver la cantidad de espacio usado en disco por cada tabla

svv_table_info permite ver que tipo de distribución tienen las tablas creadas

La evaluación de los estilos de distribución en Amazon Redshift implica analizar cómo cada estilo afecta el rendimiento de las consultas y el uso de los recursos del clúster. Esta evaluación se realiza considerando patrones de consultas, tamaño de las tablas y relaciones entre datos. ### **1. Factores a evaluar** #### **a. Costo de transferencia de datos** * Redshift puede mover datos entre nodos durante operaciones como `JOIN`, `GROUP BY` o agregaciones. * El estilo de distribución elegido puede minimizar (o maximizar) este movimiento. #### **b. Paralelismo** * Una distribución bien diseñada utiliza eficientemente todos los nodos del clúster. * Distribuciones desequilibradas pueden sobrecargar ciertos nodos y subutilizar otros. #### **c. Tamaño y uso de tablas** * Tablas pequeñas pueden replicarse (usando `DISTSTYLE ALL`) para mejorar consultas frecuentes. * Tablas grandes requieren distribuciones específicas para evitar cuellos de botella. ### **2. Comparación práctica de estilos** #### **a. EVEN** * **Ventajas**: * Balancea uniformemente las filas entre nodos. * Ideal para tablas que no tienen relaciones directas con otras. * **Desventajas**: * Puede causar transferencias de datos significativas en operaciones `JOIN`. * **Caso de uso**:CREATE TABLE logs ( log\_id INT, timestamp TIMESTAMP, message TEXT ) DISTSTYLE EVEN; #### **b. KEY** * **Ventajas**: * Optimiza operaciones `JOIN` y `WHERE` basadas en la clave de distribución. * Reduce la transferencia de datos si las tablas relacionadas comparten la misma clave. * **Desventajas**: * Si la clave tiene una distribución sesgada, puede sobrecargar ciertos nodos. * **Caso de uso**:CREATE TABLE pedidos ( pedido\_id INT, cliente\_id INT, fecha TIMESTAMP ) DISTSTYLE KEY DISTKEY(cliente\_id); #### **c. ALL** * **Ventajas**: * Cada nodo tiene una copia completa de la tabla, eliminando transferencias de datos en `JOIN`. * Perfecto para tablas pequeñas de referencia. * **Desventajas**: * Aumenta el uso de almacenamiento. * No es adecuado para tablas grandes. * **Caso de uso**:CREATE TABLE productos ( producto\_id INT, nombre VARCHAR(100) ) DISTSTYLE ALL; ### **3. Métricas de evaluación** #### **a. Análisis de consultas** * Usa `EXPLAIN` para identificar movimientos de datos (indicador de distribución subóptima). #### **b. Métricas del sistema** * Monitorea vistas del sistema como `SVL_QUERY_REPORT` y `SVL_QUERY_SUMMARY` para analizar el rendimiento. #### **c. Balance de nodos** * Verifica la vista `SVV_DISKUSAGE` para confirmar que los nodos están utilizando un almacenamiento equilibrado. ### **4. Estrategia de evaluación** 1. **Define patrones de consultas principales**: * Identifica consultas frecuentes y operaciones críticas (`JOIN`, `GROUP BY`, etc.). 2. **Asigna estilos de distribución a tablas**: * Usa `DISTSTYLE ALL` para tablas pequeñas relacionadas. * Usa `DISTSTYLE KEY` para tablas relacionadas con claves frecuentes. * Usa `DISTSTYLE EVEN` para tablas independientes. 3. **Prueba y optimiza**: * Ejecuta consultas representativas y mide tiempos de ejecución. * Ajusta estilos de distribución si las transferencias de datos son elevadas o si el paralelismo es bajo. ### **5. Ejemplo de evaluación** #### Escenario: * Tienes una tabla de ventas (`ventas`) y otra de clientes (`clientes`). * Las consultas frecuentes incluyen: SELECT clientes.nombre, SUM(ventas.total) FROM ventas JOIN clientes ON ventas.cliente\_id = clientes.cliente\_id GROUP BY clientes.nombre; #### Proceso: 1. Define `ventas` con `DISTSTYLE KEY` y `DISTKEY(cliente_id)`:CREATE TABLE ventas ( venta\_id INT, cliente\_id INT, total DECIMAL(10, 2) ) DISTSTYLE KEY DISTKEY(cliente\_id); 2. Configura `clientes` con `DISTSTYLE ALL`:CREATE TABLE clientes ( cliente\_id INT, nombre VARCHAR(100) ) DISTSTYLE ALL; 3. Ejecuta la consulta y analiza: * Usa `EXPLAIN` para verificar movimientos de datos. * Monitorea vistas del sistema para confirmar mejoras en el rendimiento. ### **6. Conclusión** Evaluar los estilos de distribución en Redshift es una tarea iterativa. Comienza con configuraciones basadas en patrones de uso y ajusta en función de las métricas de rendimiento. Una configuración óptima maximiza el paralelismo, minimiza transferencias de datos y mejora los tiempos de respuesta de las consultas.

pg_table_def permite ver como estan definidas las tablas

CREATE TABLE table_name (columns) distribution: diststyle key distkey (column_name) diststyle even diststyle all Si no se especifica ninguno, se aplica diststyle auto Luego los valores que se inserten en la tabla, se distribuiran en los nodos de acuerdo al tipo de distribución definida

hola, En el minuto 15:15 se observa que a partir de la distribución ALL, la cantidad de registros (num\_values) en el primer slide de cada nodo es el doble (99.980) de la cantidad de registros de la tabla (49.990). Es decir, es como si estuviera duplicando cada registro de la tabla en cada uno de los nodos. ¿Existe alguna explicación para este comportamiento? Gracias.

Puedes compartir esos queries por fa

interesante