7

В Amazon Redshift's Getting Started Guide данные извлекаются из Amazon S3 и загружаются в кластер Redshift Amazon с использованием SQLWorkbench/J. Я хотел бы воспроизвести тот же процесс подключения к кластеру и загрузить образцы данных в кластер, используя Boto3.Как загрузить данные в Amazon Redshift через Python Boto3?

Однако в Boto3's documentation Redshift я не могу найти способ, который позволил бы мне загружать данные в кластер Amazon Redshift.

Я был в состоянии соединиться с Redshift использованием Boto3 со следующим кодом:

client = boto3.client('redshift') 

Но я не уверен, что метод позволит мне либо создавать таблицы или загружать данные в Amazon Redshift путь это делается в tutorial with SQLWorkbenchJ.

ответ

4

Вернитесь к шагу 4 в этом учебнике, которое вы связали. Посмотрите, где он показывает вам, как получить URL-адрес кластера? Вы должны подключиться к этому URL-адресу с помощью драйвера PostgreSQL. SDK AWS, такие как Boto3, обеспечивают доступ к API AWS. Вам необходимо подключиться к Redshift через PostgreSQL API, так же, как вы подключаетесь к базе данных PostgreSQL на RDS.

+0

Спасибо! Теперь я пытаюсь понять, как использовать SQLAlchemy вместо SQLWorkbenchJ, с которым я с трудом использую (я могу отредактировать этот вопрос или создать новый). – Chris

+0

Если у вас есть новый вопрос, создайте новый вопрос. Пожалуйста, не редактируйте существующий вопрос, чтобы спросить что-то новое. –

+0

Используйте Agine Workbench для Redshift для подключения к кластеру. Он имеет намного лучшие пользовательские интерфейсы и функции, и также рекомендован людьми AWS. – Paladin

10

Право, вам нужно psycopg2 Модуль Python для выполнения команды COPY.

Мой код выглядит следующим образом:

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() 

Я использовал boto3/psycopg2 написать CSV_Loader_For_Redshift