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? [关闭]

有没有办法将数据从 redshift 加载到 HDFS?

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

从 parquet 文件将具有默认值的数据加载到 Redshift

将数据加载到 redshift 数据库中