Как загрузить данные в Amazon Redshift через Python Boto3?

в Amazon Redshift Начало Работы Руководство, данные извлекаются из Amazon S3 и загружаются в кластер Amazon Redshift с использованием SQLWorkbench/J. я хотел бы имитировать тот же процесс подключения к кластеру и загрузки образцов данных в кластер с использованием Boto3.

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

я смог подключиться к Redshift, используя Boto3 со следующим кодом:

client = boto3.client('redshift')

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

2 ответов


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


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

мой код выглядит так:

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