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

El comando copy a fondo

23/33
Recursos

¿Cómo utilizar el comando COPY para cargar datos en Redshift?

El comando COPY es una poderosa herramienta en Redshift que permite transferir datos de un bucket en AWS S3 a tablas alojadas en este sistema. Este comando es altamente versátil gracias a sus múltiples parámetros y flags, lo que facilita la manipulación de datos en la migración. Aquí exploraremos cómo se usan algunos de los parámetros más comunes y útiles del comando COPY.

¿Cómo preparar los archivos para la carga?

Antes de realizar la importación a Redshift, es esencial preparar adecuadamente los archivos de origen. Estos archivos deben estar almacenados en un bucket de S3.

  1. Configuración de los archivos CSV:
    • Abrir cada archivo para verificar la estructura y el formato de los datos.
    • Asegúrate de que cada archivo CSV tenga una extensión correcta y revisa su delimitador, que podría ser punto y coma u otro carácter.
    • Verifica la existencia de líneas en blanco o valores nulos que puedan causar errores durante la carga en Redshift.
  2. Almacenamiento en S3:
    • Sube los archivos al bucket de S3.
    • Asegúrate de que el bucket y los archivos tengan los permisos adecuados para que Redshift pueda acceder a ellos mediante el uso de IAM roles.

¿Cómo crear y estructurar la tabla de Redshift?

Primero, debemos crear una tabla en Redshift que sea capaz de recibir la misma estructura de los archivos CSV.

CREATE TABLE estudiante (
  ID INT,
  nombre VARCHAR(20),
  apellido VARCHAR(20),
  edad INT,
  fecha_ingreso DATE
);

Asegúrate de que los tipos de datos en la tabla coincidan con el contenido de los archivos para evitar errores durante el proceso de carga.

¿Cómo usar el comando COPY con parámetros específicos?

Redshift ofrece varios parámetros en el comando COPY para controlar cómo se cargan los datos. Algunos de los parámetros más comunes incluyen:

  1. Delimitador:

    • Si los archivos CSV están delimitados por caracteres específicos, utiliza el parámetro DELIMITER para especificar este carácter. Ejemplo: DELIMITER ';'.
  2. Manejo de encabezados:

    • Si el archivo incluye una fila de encabezado, utiliza IGNOREHEADER 1 para omitirla durante la carga.
  3. Líneas en blanco y valores nulos:

    • Usa BLANKSASNULL para convertir las celdas en blanco en valores nulos, que serían representados con NULL en la base de datos.
    • El parámetro IGNOREBLANKLINES ayuda a omitir totalmente las líneas en blanco en el archivo CSV.
  4. Formato de fecha:

    • Si los archivos tienen un formato de fecha particular, usa DATEFORMAT para adaptar diferentes formatos de fecha. Ejemplo: DATEFORMAT 'MM/DD/YYYY'.

¿Qué debemos hacer ante un error de carga?

Es común que se presenten errores al ejecutar el comando COPY. Redshift ofrece la posibilidad de verificar los errores mediante un log conocido como stl_load_errors. Para investigar más sobre un error específico:

  • Ejecuta una consulta sobre stl_load_errors para identificar la causa del error:

    SELECT * FROM stl_load_errors WHERE session = <session_id>;
    

Evalúa el error específico, ajusta parámetros y vuelve a intentar cargar los datos.

¿Cuáles son algunas recomendaciones y mejores prácticas?

  • Verifica siempre los formatos y delimitadores antes de ejecutar una carga. Esto ahorra tiempo corrigiendo errores post-ejecución.
  • Utiliza roles de IAM para autenticar con precisión los accesos a los buckets de S3, haciendo la carga segura y eficiente.
  • Realiza pruebas de carga con muestras pequeñas de datos antes de cargar archivos grandes para troubleshooting rápido.

Con estos consejos y una correcta configuración del comando COPY, podrás gestionar eficientemente tus cargas de datos en Redshift, optimizando tanto tiempo como recursos en tu flujo de desarrollo y análisis de datos. ¡Sigue explorando el potencial de Redshift y sus herramientas para mejorar la forma en que gestionas y analizas tus datos!

Aportes 9

Preguntas 1

Ordenar por:

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

Este es el tipo de cursos que valen mucho la pena, con escenarios reales y bien explicados !

Les dejo los querys:

CREATE TABLE estudiante (
id int2,
nombre varchar(20),
apellido varchar(20),
edad int2,
fecha_ingreso date
);

SELECT * FROM estudiante;

copy estudiante FROM 's3://mibucketredshift/primer_cargue.csv'
credentials 'aws_iam_role=arn:aws:iam::XXXXXX:role/MiRolRedshift'
region 'us-east-2'
delimiter ';'
ignoreheader 1
ignoreblanklines;

TRUNCATE TABLE estudiante;

copy estudiante FROM 's3://mibucketredshift/primer_cargue.csv'
credentials 'aws_iam_role=arn:aws:iam::XXXXXX:role/MiRolRedshift'
region 'us-east-2'
delimiter ';'
ignoreheader 1
ignoreblanklines
blanksasnull;

copy estudiante FROM 's3://mibucketredshift/segundo_cargue.csv'
credentials 'aws_iam_role=arn:aws:iam::XXXXXX:role/MiRolRedshift'
region 'us-east-2'
delimiter ';'
ignoreheader 1
ignoreblanklines
blanksasnull
dateformat 'mm-dd-yyyy';

Hasta ahora este curso a sido el mejor de la ruta data science, lo mas tipico es encontrar esos errores en archivos, excelente clase

Ayer trabajando en un pequeño proyecto tuve que cargar la data de un csv a una BD MySQL, y aunque lo hice por medio de un script de python, me enfrenté con problemas muy similares a los mostrados aquí. La mayoría los resolví limpiando el dataset.
Muy bien en poner ejercicios con cosas que pasan en la vida real.

Buena clase, algo similar me paso al cargar en Snowflake con los delimitadores, blanks, headers y formatos de fecha, estoy de acuerdo en que estos son los errores típicos (comunes) en las cargas.

excelente clase y Carlos como profesor excelente

¡Vamos a profundizar en el comando `COPY` de Amazon Redshift! Es la herramienta más eficaz para cargar datos a gran escala en tablas de Redshift. ### **¿Qué hace el comando** `COPY`**?** `COPY` transfiere datos desde fuentes externas, como **Amazon S3**, **DynamoDB**, o **servidores locales**, a tablas de Redshift. Su diseño aprovecha la arquitectura distribuida de Redshift para realizar la carga de datos de manera paralela y eficiente. ### **Sintaxis Básica:** COPY table\_name FROM 'data\_source' CREDENTIALS 'aws\_credentials' FORMAT \[AS] data\_format \[COMPUPDATE {ON | OFF}] \[STATUPDATE {ON | OFF}] \[REGION 'region'] \[DELIMITER 'delimiter'] \[IGNOREHEADER n] \[GZIP | BZIP2 | LZOP] \[MANIFEST] \[TIMEFORMAT 'format'] \[DATEFORMAT 'format'] \[ENCODING 'encoding']; ### **Parámetros Clave del Comando** `COPY`**:** #### **1.** `FROM` * Especifica la fuente de datos. Puede ser una ubicación en **Amazon S3**, una tabla de **DynamoDB**, o un archivo en un servidor local. * **Ejemplo:**FROM 's3://my-bucket/data/' #### **2.** `CREDENTIALS` * Define cómo Redshift accede a la fuente. Usualmente mediante un rol de IAM. * **Ejemplo:**CREDENTIALS 'aws\_iam\_role=arn:aws:iam::123456789012:role/MyRedshiftRole' #### **3.** `FORMAT` * Define el formato de los datos: **CSV**, **JSON**, **PARQUET**, **AVRO**, etc. * **Ejemplo:**FORMAT AS JSON 'auto' #### **4.** `DELIMITER` **y** `IGNOREHEADER` * Especifica el delimitador de columnas y si se deben ignorar filas de encabezado. * **Ejemplo:**DELIMITER ',' IGNOREHEADER 1 #### **5. Compresión (**`GZIP`**,** `BZIP2`**,** `LZOP`**)** * Redshift puede descomprimir automáticamente archivos comprimidos. * **Ejemplo:**GZIP #### **6.** `REGION` * Especifica la región de AWS donde se encuentra la fuente. * **Ejemplo:**REGION 'us-west-2' #### **7. Opciones de optimización:** * `COMPUPDATE`: Ajusta automáticamente la estrategia de compresión para las columnas de la tabla.COMPUPDATE ON * `STATUPDATE`: Actualiza automáticamente las estadísticas de la tabla después de la carga.STATUPDATE ON ### **Formatos de Datos Admitidos:** 1. **CSV** * Común para datos tabulares. * **Ejemplo:**FORMAT AS CSV DELIMITER ',' IGNOREHEADER 1; 2. **JSON** * Ideal para datos semi-estructurados. * **Ejemplo:**FORMAT AS JSON 's3://my-bucket/jsonpath\_file.json'; 3. **PARQUET** y **AVRO** * Diseñados para big data y optimizados para almacenamiento. * **Ejemplo:**FORMAT AS PARQUET; ### **Ejemplo Completo:** COPY sales\_data FROM 's3://my-bucket/sales/' IAM\_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole' CSV DELIMITER ',' IGNOREHEADER 1 GZIP REGION 'us-west-2' COMPUPDATE ON STATUPDATE ON; ### **Monitoreo del Comando** `COPY`**:** #### **Vistas útiles:** 1. `STL_LOAD_COMMITS` * Detalles de las cargas exitosas. 2. `STL_LOAD_ERRORS` * Detalles sobre errores en las cargas. 3. `SVV_TABLE_INFO` * Información sobre distribución, ordenamiento y tamaños de tabla. #### **Consultar errores:** SELECT \* FROM STL\_LOAD\_ERRORS WHERE filename LIKE 's3://my-bucket/sales/%'; ### **Buenas Prácticas al Usar** `COPY`**:** 1. **Dividir archivos grandes en fragmentos de ~1 GB.** 2. **Usar columnas distribuidas y claves de ordenamiento.** 3. **Limitar el uso de** `STATUPDATE` **y** `COMPUPDATE` **si el volumen de datos es muy alto.** 4. **Verificar permisos de IAM antes de ejecutar el comando.** El comando `COPY` es una joya para el procesamiento masivo de datos en Redshift, combinando velocidad, eficiencia y flexibilidad. ¡Explora y optimiza tus cargas con este poderoso comando! 🚀

Esta clase esta increible!

CREATE TABLE estudiante 
(
id int2,
nombre varchar(20),
apellido varchar(20),
edad int2,
fecha_ingreso date
);

select * FROM estudiante;
truncate table estudiante;

copy estudiante FROM 's3://mybucketredshiftsantiago/primer_cargue.csv'
credentials 'aws_iam_role=arn:aws:iam::XXXX:role/MiRoleRedshift'
region  'us-east-2'
delimiter ';'
ignoreheader 1
ignoreblanklines
blanksasnull
;

select * FROM stl_load_errors;
select * FROM estudiante;

copy estudiante FROM 's3://mybucketredshiftsantiago/segundo_cargue.csv'
credentials 'aws_iam_role=arn:aws:iam::XXXX:role/MiRoleRedshift'
region  'us-east-2'
delimiter ';'
ignoreheader 1
ignoreblanklines
blanksasnull
dateformat 'mm-dd-yyyy'
;

select * FROM estudiante;