【问题标题】:Python loads data from Redshift to S3Python 将数据从 Redshift 加载到 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上?

【问题讨论】:

    标签: python pandas amazon-s3 amazon-redshift


    【解决方案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 存储桶执行任何清理,因此这样做的副作用是数据最终会出现在您指定的存储桶中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 2020-02-11
        • 1970-01-01
        相关资源
        最近更新 更多