2017-10-30 3 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에 덤프 할 데이터 경우 : DF가 성공적으로 생성 된

sql_statement = ''' 
select 
provider, 
provider_code 
from db1.table1 
group by provider, provider_code; 

''' 
df = pr.redshift_to_pandas(sql_statement) 

하지만 다음 단계를 수행하는 방법 이 데이터 프레임을 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 앞 설명서를 참조하십시오 실행해야합니다.

0

Jon Scott은 데이터를 적색 변이에서 S3로 옮기는 것이면 pandas_redshift 패키지가 올바른 방법이 아니라고 언급했습니다. 이 패키지는 적색 편이에서 로컬 컴퓨터의 Pandas DataFrame으로 데이터를 쉽게 이동하거나 로컬 컴퓨터의 Pandas DataFrame에서 적색 편이로 데이터를 이동할 수있게 해줍니다.

df = pr.redshift_to_pandas(sql_statement) 

S3를 전혀 사용하지 않고 적색 변이에서 컴퓨터로 데이터를 직접 가져옵니다. 그러나이 명령은 :

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

복사 S3에서 CSV로 DataFrame, 다음 (이 단계는 성공적으로 pr.connect_to_s3 실행해야합니다) CSV는 적색 편이를 위해 복사하는 쿼리를 실행합니다. S3 버킷의 정리를 수행하지 않으므로 부작용은 지정한 버켓에 데이터가 저장된다는 것입니다.