我正在尝试将一些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?
答案 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存储桶的任何清理,因此副作用是数据将最终存储在您指定的存储桶中。