Python 将数据从 Redshift 加载到 S3
Posted
技术标签:
【中文标题】Python 将数据从 Redshift 加载到 S3【英文标题】:Python loads data from Redshift to S3 【发布时间】:2017-10-30 17:55:37 【问题描述】:我正在尝试将一些 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创建成功了,下一步怎么做,就是把这个dataframe放到S3上?
【问题讨论】:
【参考方案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 前端文档。
【讨论】:
【参考方案2】:正如 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 存储桶执行任何清理,因此这样做的副作用是数据最终会出现在您指定的存储桶中。
【讨论】:
以上是关于Python 将数据从 Redshift 加载到 S3的主要内容,如果未能解决你的问题,请参考以下文章
如何使用无服务器架构将数据从 S3 加载到 Redshift?
如何使用 Python 从 OS Windows 将 CSV 文件加载到 Amazon Redshift? [关闭]
Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?