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 descargar datos eficientemente con UNLOAD?

31/33
Recursos

Aportes 9

Preguntas 0

Ordenar por:

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

Super, he aprendido mucho… Explica super bien, sinceramente tome este curso para aprender y estoy conforme.

Resultados

El parámetro MANIFEST crear un archivo en formato JSON con el detalle de las rutas y tamaño se los archivos creados, ejemplo:

Nombre de archivo: unload_test_3manifest

Contenido

{
  "entries": [
    {"url":"s3://almacenamiento/unload/unload_test_30000_part_00.zst", "meta": { "content_length": 7591016 }},
    {"url":"s3://almacenamiento/unload/unload_test_30001_part_00.zst", "meta": { "content_length": 7589291 }}
  ]
}

El parámetro PARTITION BY crea los archivos de acuerdo al resultado de la agrupación de la tabla por la columna o columnas indicadas (se creará una carpeta por cada grupo y se colocarán los archivos dentro)
Por ejemplo para si en la partición de especifica la columna C_REGION de la siguiente forma:

unload ('select*from unload_test_2')
TO 's3://almacenamiento/unload/unload_test_4_'
credentials 'aws_iam_role=identificador_rol'
allowoverwrite --Sobreescribir archivos existentes
delimiter ';' --Delimitador de columnas
header --Incluir cabecera de columnas
maxfilesize 500 mb --limitar el tamaño de archivo a 500 MB
zstd --crear archivo comprimido
manifest 
partition by (c_region) include 

Se creará la siguiente estructura de archivos en S3:

Carpetas:
unload_test_4_
unload_test_4_/c_region=AFRICA
unload_test_4_/c_region=AMERICA

Archivos:
unload_test_4_/manifest
unload_test_4_/c_region=AFRICA/0000_part_00.zst
unload_test_4_/c_region=AFRICA/0001_part_00.zst
unload_test_4_/c_region=AMERICA/0000_part_00.zst
unload_test_4_/c_region=AMERICA/0001_part_00.zst

CREATE TABLE unload_test AS (
SELECT * FROM cust_sales_intercalado 
UNION ALL
SELECT * FROM cust_sales_intercalado 
UNION ALL
SELECT * FROM cust_sales_intercalado 
);

SELECT COUNT(0) FROM cust_sales_intercalado; 

SELECT COUNT(0) FROM unload_test; 

unload ('select * from unload_test')
to 's3://mybucketredshiftsantiago/unload/unload_test_'
credentials 'aws_iam_role=arn:aws:iam::118590468211:role/MiRoleRedshift';


unload ('select * from unload_test')
to 's3://mybucketredshiftsantiago/unload/unload_test_'
credentials 'aws_iam_role=arn:aws:iam::118590468211:role/MiRoleRedshift'
parallel off
ALLOWOVERWRITE;

CREATE TABLE unload_test_2 AS (
	SELECT * 
	FROM unload_test
	LIMIT 2000000);

unload ('select * from unload_test_2')
to 's3://mybucketredshiftsantiago/unload/unload_test_4'
credentials 'aws_iam_role=arn:aws:iam::118590468211:role/MiRoleRedshift'
ALLOWOVERWRITE
delimiter ';'
header
maxfilesize 500 mb
ZSTD
manifest
partition by (c_nation) INCLUDE 
;

Al hacer manifest & partition by el comando unload me creo un folder

unload ('select * from unload_test_2')
to 's3://bucket-s3-de-.../unload/unload_test_'
credentials 'aws_iam_role=arn:'
allowoverwrite
delimiter ';' --Delimitador 
header --agrega el header
maxfilesize 500 mb -- El tamaño de archivo 
zstd --comprime el archivo: compresion estandar
manifest --crea archivo minifest
partition by (c_region) include --particiona los archivos de salida por esta columna
;

  1. Se cargó la tabla particionada por la columna c_mktsegment a S3:

  2. Se creó un archivo manifest indicando la ubicación y el tamaño de cada partición:

A alguien le dio problemas el crear archivos tan grandes? Porque a agosto 2021 la capa gratuita de AWS solo permite cargar 5 gb por mes a S3 y me dio miedo cargar archivos tan grandes como los del ejemplo del profe

Una nota del comando “INCLUDE”:

En algunos casos, el comando UNLOAD utiliza la opción INCLUDE como se muestra en la siguiente instrucción SQL.

unload (‘select * from lineitem’)
to 's3://mybucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole’
PARQUET
PARTITION BY (l_shipdate) INCLUDE;

En estos casos, la columna l_shipdate también está en los datos de los archivos Parquet. De lo contrario, los datos de la columna l_shipdate no están en los archivos Parquet.

importante
Si descarga archivos con la opción MANIFEST, debe utilizar la opción MANIFEST con el comando COPY cuando carga los archivos. Si utiliza el mismo prefijo para cargar los archivos y no especifica la opción MANIFEST, COPY produce un error porque supone que el archivo de manifiesto es un archivo de datos.

### **¿Qué es el comando UNLOAD en Amazon Redshift?** El comando **UNLOAD** permite exportar datos desde una tabla en Amazon Redshift hacia un archivo en un bucket de Amazon S3. Es una forma eficiente de descargar datos para análisis externo, respaldo, o migración. Este proceso aprovecha la arquitectura paralela de Redshift para generar múltiples archivos en S3 simultáneamente, optimizando el tiempo de exportación. ### **Sintaxis básica del comando UNLOAD** UNLOAD ('consulta\_SQL') TO 's3://ruta-del-bucket/nombre-archivo' CREDENTIALS 'aws\_access\_key\_id=\<ACCESS\_KEY\_ID>;aws\_secret\_access\_key=\<SECRET\_ACCESS\_KEY>' DELIMITER ',' ADDQUOTES ALLOWOVERWRITE PARALLEL OFF; ### **Parámetros importantes** 1. **Consulta SQL**: * Define los datos que deseas exportar. Puede ser desde una tabla o un subconjunto mediante una consulta SQL. * Ejemplo: `SELECT * FROM tabla_ventas WHERE fecha > '2024-01-01'`. 2. **TO**: * Especifica el bucket de S3 y el prefijo del archivo donde se exportarán los datos. * Ejemplo: `'s3://mi-bucket/redshift-export/ventas_'`. 3. **CREDENTIALS**: * Incluye las credenciales de AWS necesarias para que Redshift acceda al bucket de S3. * También se puede usar un **IAM Role**:CREDENTIALS 'aws\_iam\_role=arn:aws:iam::123456789012:role/RedshiftRole' 4. **DELIMITER**: * Define el separador entre columnas en el archivo resultante (por defecto es coma `,`). 5. **ADDQUOTES**: * Rodea los valores de texto con comillas para evitar problemas al cargar los datos posteriormente. 6. **ALLOWOVERWRITE**: * Permite sobrescribir los archivos existentes en el bucket de S3. 7. **PARALLEL**: * Si está activado (`ON`), Redshift genera múltiples archivos en paralelo. * Si está desactivado (`OFF`), genera un único archivo. ### **Ejemplo práctico** Exportar datos de ventas mayores a $1000 a S3: UNLOAD ('SELECT \* FROM ventas WHERE total > 1000') TO 's3://mi-bucket/redshift-data/ventas\_mayores\_1000\_' CREDENTIALS 'aws\_iam\_role=arn:aws:iam::123456789012:role/RedshiftRole' DELIMITER '|' ADDQUOTES ALLOWOVERWRITE PARALLEL ON; **Detalles del ejemplo**: * Los datos se exportarán en archivos con el prefijo `ventas_mayores_1000_`. * Cada columna estará separada por el carácter `|`. * Los valores de texto estarán rodeados de comillas. * Los archivos serán generados en paralelo. ### **Buenas prácticas para usar UNLOAD** 1. **Dividir datos en archivos más pequeños**: * Usar `PARALLEL ON` para dividir los datos en múltiples archivos facilita la transferencia y el procesamiento en sistemas externos. 2. **Optimizar la consulta SQL**: * Asegúrate de que la consulta tenga filtros adecuados para reducir la cantidad de datos exportados. 3. **Uso de prefijos únicos**: * Utiliza prefijos únicos para evitar sobrescribir datos accidentalmente. 4. **Definir delimitadores adecuados**: * Selecciona un delimitador que no exista en los datos para evitar errores al analizar los archivos. 5. **Verificar el espacio en S3**: * Asegúrate de que el bucket tenga suficiente espacio para almacenar los datos exportados. 6. **Seguridad**: * Usa IAM roles en lugar de credenciales de acceso para una mayor seguridad. ### **Verificación del proceso** Después de ejecutar el comando, verifica los archivos en el bucket de S3 para asegurarte de que se exportaron correctamente. Usa herramientas como AWS CLI para listar los archivos: aws s3 ls s3://mi-bucket/redshift-data/

interesante