Python将数据从Redshift加载到S3

时间:2017-10-30 17:55:37

标签: python amazon-s3 amazon-redshift

我正在尝试将一些Redshift查询结果加载到S3。到目前为止,我正在使用pandas_redshift,但我被卡住了:

import pandas_redshift as pr

pr.connect_to_redshift( dbname = 'dbname',
                    host = 'xxx.us-east-    1.redshift.amazonaws.com',
                    port = 5439,
                    user = 'xxx',
                    password = 'xxx')

pr.connect_to_s3(aws_access_key_id = 'xxx',
            aws_secret_access_key = 'xxx',
            bucket = 'dxxx',
            subdirectory = 'dir')

以下是我要转储到S3的数据:

sql_statement = '''
select
provider,
provider_code 
from db1.table1
group by provider, provider_code;

'''
df = pr.redshift_to_pandas(sql_statement)

df已成功创建,但如何进行下一步,即将此数据框设置为S3?

2 个答案:

答案 0 :(得分:1)

您正在考虑的方法效率非常低。

以正确的方式执行此操作,您需要一种在redshift上运行sql的方法 - 例如蟒。

应该运行以下sql

unload ('select provider,provider_code
         from db1.table1
           group by provider, provider_code;')   
to 's3://mybucket/myfolder/unload/' 
access_key_id '<access-key-id>'
secret_access_key '<secret-access-key>';

请参阅here前文档。

答案 1 :(得分:0)

正如Jon Scott所提到的,如果您的目标是将数据从redshift移动到S3,那么pandas_redshift包不是正确的方法。该软件包旨在让您轻松地将数据从redshift移动到本地计算机上的Pandas DataFrame,或者将数据从本地计算机上的Pandas DataFrame移动到redshift。值得注意的是运行已有的命令:

df = pr.redshift_to_pandas(sql_statement)

将数据直接从redshift拉到您的计算机,而根本不涉及S3。但是这个命令:

pr.pandas_to_redshift(df, 'schema.your_new_table_name')

在S3中将DataFrame复制到CSV,然后运行查询以将CSV复制到redshift(此步骤要求您成功运行pr.connect_to_s3)。它不执行S3存储桶的任何清理,因此副作用是数据将最终存储在您指定的存储桶中。