Команда копирования AWS не работает в экземпляре EC2 с python psycopg2 - PullRequest
0 голосов
/ 08 марта 2019

Когда я использую рабочую среду SQL, команда копирования AWS работает хорошо.Цель - скопировать данные S3 в таблицу Redshift.Вот команда копирования, которую я использую:

copy oao_features_usbank_v2 from 's3://my_bucket/test_data.csv' iam_role 'arn:aws:iam::accountid:role/my_role' CSV IGNOREHEADER 1 MAXERROR 10 DELIMITER as '|';

Затем при использовании python psycopg2.Я пробовал несколько способов подключения, ни один из них не работает.Такие как:

conn_string = 'postgresql://username:pwd@host:port/db'
copy_query = 'copy oao_features_usbank_v2 from 's3://my_bucket/test_data.csv' iam_role 'arn:aws:iam::accountid:role/my_role' CSV IGNOREHEADER 1 MAXERROR 10 DELIMITER as '|';'

with psycopg2.connect(conn_string) as conn:
    with conn.cursor() as curs:
        curs.execute(copy_query)
    conn.commit()

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Попробуйте что-то вроде этого:

import psycopg2
​
db = "your_database"
host = "redshift_end_point"
port = "5439"
user = "your_user_here"
pwd = "your_password_here"
connstr = "dbname=%s host=%s port=%s user=%s password=%s" % (db, host, port, user, pwd)
​
con = psycopg2.connect(connstr)

Конечная точка Redshift находится в консоли AWS.Это будет выглядеть примерно так:

clustername.sofhsdl34534.us-east-1.redshift.amazonaws.com

Ваш экземпляр EC2 также должен иметь присоединенную группу безопасности, которая позволяет подключаться к Redshift.

0 голосов
/ 21 марта 2019

Попробуйте вставить свой copy_query в строку из нескольких строк, как показано ниже: copy_query = "" "скопировать oao_features_usbank_v2 из 's3: //my_bucket/test_data.csv' iam_role 'arn: aws: iam :: accountid: role / my_role' CSV IGNOREHEADER 1 MAXERROR 10 DELIMITER в качестве '|'; ' "" "

Так что код Python примет всю строку внутри трех кавычек в качестве команды копирования

...