2017-10-30 19 views
0

Redshiftのクエリ結果をS3に読み込もうとしています。これまでのところ私はpandas_redshiftを使用していますが、私は捕まってしまった:PythonはRedshiftからS3にデータをロードします

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に入れることですか?

答えて

1

あなたが見ている方法は非常に非効率的です。

これを行うには、redshiftでSQLを実行する方法が必要です。 Python。

次の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前部のマニュアルを参照してください。

0

Jon Scottは、RedshiftからS3にデータを移動することを目標としているため、pandas_redshiftパッケージは正しい方法ではありません。このパッケージは、ローカルマシン上のRedshiftからPandas DataFrameにデータを簡単に移動したり、ローカルマシン上のPandas DataFrameからRedshiftにデータを簡単に移動できるようにするためのものです。あなたが既に持っているコマンドを実行していることは注目に値する:

df = pr.redshift_to_pandas(sql_statement) 

は全くS3を介さずに赤方偏移からコンピュータに直接データを取得します。しかし、このコマンド:S3でCSVへ

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

コピーデータフレームは、その後、(このステップは、あなたが成功しpr.connect_to_s3を実行することを要求する)赤方偏移してCSVをコピーするクエリを実行します。 S3バケットのクリーンアップは実行されません。そのため、指定したバケットにデータが格納されるという副作用があります。

関連する問題