Carga de datos: subida de archivos a AWS Redshift
Clase 17 de 25 • Curso de Fundamentos de ETL con Python y Pentaho
Contenido del curso
Clase 17 de 25 • Curso de Fundamentos de ETL con Python y Pentaho
Contenido del curso
Bryan Carvajal
david.parra
Yeison Arias
Javier Hugo Noto Enriquez
JONATHAN ALVAREZ LOPEZ
David Arenas Zapata
Alarcon7a
emperez
Platzi
Manuel Juarez
Mario Alexander Vargas Celis
Yhomira Alexandra Yupayccana Lopa
Aarón González
El profe parece que esta hablando para el solamente, va muy rapido y se hace dificil seguir lo que esta haciendo... ojala mejoren estos cursos.
De acuedo. Se da por sentado que conocemos el contexto de la data y muchas técnicas/tecnologías que no se enseñan en los cursos requeridos para ver este.
Por favor editar mejor el video en el minuto 3:46, ya que desaparece de la nada el ciclo que estaba intentando crear :/
Ha sido un desafío seguir el curso, pero sin duda muy útil, he podido interiorizar conceptos, y analizar detalles en muchas partes del curso.
Como menciona el profesor que hay distintos targets a los que podemos cargar la información, hubiera estado perfecto que se mostrara como se puedo ingestar la información a otras nubes o bases de datos y no solo "casarse" una tecnología...
¿Por qué se opta por no hacer el cargue con el ciclo?
list_files = os.listdir('target/') for _ in list_files: load_file(_)
Podría perder la sesión de base de datos, pero si es posible también 👌👌👌
En que herramienta esta trabajando?
Pentaho Data Integration y Pandas de Python.
Hola, estoy obteniendo el siguiente error:
“ProgrammingError: {‘S’: ‘ERROR’, ‘C’: ‘25P02’, ‘M’: ‘current transaction is aborted, commands ignored until end of transaction block’, ‘F’:”
Es un problema en el query pero no estoy pudiendo ubicarlo:
sentence=’’‘copy public.{} from ‘s3://curso-etl-platzi-manu/{}’ credentials ‘aws_access_key_id={}; aws_secret_access_key={}’ csv delimiter ‘|’ region ‘sa-east-1’ ignoreheader 1 ‘’’.format(table_name,file_name, os.environ.get(‘ETL_AWS_ACCESS_KEY_ID’),os.environ.get(‘ETL_AWS_SECRET_ACCESS_KEY’))
Cualquier ayuda se agradecería mucho
Subir datos a AWS Redshift implica un proceso que usualmente consta de los siguientes pasos:
COPY para transferir los datos desde S3 a tu tabla de Redshift.Prerrequisitos
Proceso detallado
1. Preparar los datos y subirlos a S3
Puedes usar AWS CLI para subir datos a tu bucket de S3:
aws s3 cp /path/to/your/data.csv s3://your-bucket-name/data.csv
O, si estás usando Python, puedes emplear la librería boto3:
import boto3
# Configurar el cliente de S3 s3 = boto3.client('s3')
# Subir archivo s3.upload_file('data.csv', 'your-bucket-name', 'data.csv') print("Archivo subido exitosamente a S3.")
2. Configurar conexión a Redshift
Usa psycopg2 o SQLAlchemy para conectarte al clúster de Redshift:
from sqlalchemy import create_engine
# Datos de conexión DATABASE = "your_database" USER = "your_user" PASSWORD = "your_password" HOST = "your-cluster-endpoint" PORT = "5439"
# Crear la conexión engine = create_engine(f"postgresql+psycopg2://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}") connection = engine.connect() print("Conexión exitosa a Redshift.")
3. Crear la tabla en Redshift
Define la estructura de tu tabla para que coincida con los datos que cargarás:
CREATE TABLE your_table ( column1 VARCHAR(50), column2 INT, column3 DATE );
4. Cargar datos desde S3 a Redshift
Usa la instrucción COPY para transferir datos desde S3 a tu tabla en Redshift:
# Comando SQL para copiar los datos copy_command = """ COPY your_table FROM 's3://your-bucket-name/data.csv' IAM_ROLE 'arn:aws:iam::your-account-id:role/your-redshift-role' FORMAT AS CSV IGNOREHEADER 1; """
# Ejecutar el comando connection.execute(copy_command) print("Datos cargados exitosamente en Redshift.")
Consideraciones importantes
Rol IAM:
Validación:
Formato del archivo:
Errores comunes:
Alternativa: Usar AWS Data Wrangler
La librería awswrangler simplifica el proceso de carga desde Pandas DataFrame a Redshift:
import awswrangler as wr import pandas as pd
# Crear DataFrame df = pd.read_csv('data.csv')
# Cargar el DataFrame a Redshift wr.redshift.copy_from_files( paths=["s3://your-bucket-name/data.csv"], con=engine.raw_connection(), schema="public", table="your_table", iam_role="arn:aws:iam::your-account-id:role/your-redshift-role", format="csv", mode="overwrite" )
Con este enfoque, puedes integrar Redshift con tus flujos de datos en Python de manera más sencilla.
Pude cargar todas las tablas menos la tabla "trades" intenté hacerlo por lotes y tampoco, la verdad no sé qué otra alternativa hay.