【问题标题】:AWS copy command does not work in EC2 instance with python psycopg2AWS 复制命令在带有 python psycopg2 的 EC2 实例中不起作用
【发布时间】:2019-07-30 00:52:38
【问题描述】:

当我使用 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()

【问题讨论】:

    标签: python-3.x amazon-s3 amazon-ec2 amazon-redshift psycopg2


    【解决方案1】:

    试试这样的:

    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)
    

    可以在 AWS 控制台中找到 Redshift 端点。它看起来像:

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

    您的 EC2 实例还应该附加一个允许连接到 Redshift 的安全组。

    【讨论】:

      【解决方案2】:

      尝试将您的 copy_query 插入多行字符串,如下所示: copy_query = """从 's3://my_bucket/test_data.csv' 复制 oao_features_usbank_v2' iam_role 'arn:aws:iam::accountid:role/my_role' CSV IGNOREHEADER 1 MAXERROR 10 DELIMITER as '|';' """

      这样python代码会将三个引号内的所有字符串作为复制命令

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        相关资源
        最近更新 更多