2016-01-24 34 views
7

In Amazon Redshift Getting Started Guide, i dati vengono prelevati da Amazon S3 e caricati in un cluster Amazon Redshift utilizzando SQLWorkbench/J. Mi piacerebbe imitare lo stesso processo di connessione al cluster e caricamento dei dati di esempio nel cluster utilizzando Boto3.Come caricare i dati in Amazon Redshift tramite Python Boto3?

Tuttavia in Boto3's documentation di Redshift, non riesco a trovare un metodo che mi consenta di caricare i dati nel cluster Amazon Redshift.

Sono stato in grado di connettersi con Redshift utilizzando Boto3 con il seguente codice:

client = boto3.client('redshift') 

Ma io non sono sicuro di quale metodo mi permettesse di creare sia tabelle o caricare i dati ad Amazon Redshift la strada è fatto nel tutorial with SQLWorkbenchJ.

risposta

4

Torna al passaggio 4 del tutorial che hai collegato. Vedi dove ti mostra come ottenere l'URL del cluster? Devi collegarti a quell'URL con un driver PostgreSQL. Gli SDK AWS come Boto3 forniscono accesso all'API AWS. È necessario connettersi a Redshift su un'API PostgreSQL, proprio come si collegherebbe a un database PostgreSQL su RDS.

+0

Grazie! Ora sto cercando di capire come utilizzare SQLAlchemy invece SQLWorkbenchJ, che sto avendo qualche difficoltà nell'utilizzare (posso modificare questa domanda o crearne una nuova). – Chris

+0

Se hai una nuova domanda, crea una nuova domanda. Per favore non modificare una domanda esistente per chiedere qualcosa di nuovo. –

+0

Utilizzare Aginity Workbench per Redshift per connettersi al cluster. Ha un'interfaccia utente e funzionalità molto migliori, ed è raccomandato anche dalla gente di AWS. – Paladin

10

A destra, è necessario il modulo psycopg2 Python per eseguire il comando COPY.

Il mio codice è simile al seguente:

import psycopg2 
#Amazon Redshift connect string 
conn_string = "dbname='***' port='5439' user='***' password='***' host='mycluster.***.redshift.amazonaws.com'" 
#connect to Redshift (database should be open to the world) 
con = psycopg2.connect(conn_string); 
sql="""COPY %s FROM '%s' credentials 
     'aws_access_key_id=%s; aws_secret_access_key=%s' 
     delimiter '%s' FORMAT CSV %s %s; commit;""" % 
     (to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,delim,quote,gzip) 

#Here 
# fn - s3://path_to__input_file.gz 
# gzip = 'gzip' 

cur = con.cursor() 
cur.execute(sql) 
con.close() 

ho usato boto3/psycopg2 scrivere CSV_Loader_For_Redshift