2016-01-24 26 views
7

Trong Amazon Redshift's Getting Started Guide, dữ liệu được lấy từ Amazon S3 và được tải vào cụm Amazon Redshift sử dụng SQLWorkbench/J. Tôi muốn bắt chước quá trình tương tự kết nối với cụm và tải dữ liệu mẫu vào cụm sử dụng Boto3.Làm thế nào để tải dữ liệu vào Amazon Redshift thông qua Python Boto3?

Tuy nhiên trong Boto3's documentation của Redshift, tôi không thể tìm thấy phương pháp cho phép tôi tải dữ liệu lên cụm Amazon Redshift.

tôi đã có thể kết nối với chuyển đỏ sử dụng Boto3 với đoạn mã sau:

client = boto3.client('redshift') 

Nhưng tôi không chắc chắn những gì phương pháp sẽ cho phép tôi thể tạo bảng hoặc tải dữ liệu đến Amazon chuyển đỏ đường nó được thực hiện trong tutorial with SQLWorkbenchJ.

Trả lời

4

Quay lại bước 4 trong hướng dẫn mà bạn đã liên kết. Xem nơi nó cho bạn thấy làm thế nào để có được URL của cụm sao? Bạn phải kết nối với URL đó bằng trình điều khiển PostgreSQL. Các SDK AWS như Boto3 cung cấp quyền truy cập vào API AWS. Bạn cần kết nối với Redshift qua API PostgreSQL, giống như bạn sẽ kết nối với cơ sở dữ liệu PostgreSQL trên RDS.

+0

Cảm ơn! Tôi đang cố gắng tìm ra cách sử dụng SQLAlchemy thay vì SQLWorkbenchJ, mà tôi đang gặp khó khăn khi sử dụng (tôi có thể chỉnh sửa câu hỏi này hoặc tạo một câu hỏi mới). – Chris

+0

Nếu bạn có câu hỏi mới, hãy tạo một câu hỏi mới. Vui lòng không chỉnh sửa câu hỏi hiện có để hỏi điều gì đó mới. –

+0

Sử dụng Bàn làm việc Aginity cho Redshift để kết nối với cụm. Nó có giao diện người dùng và các tính năng tốt hơn nhiều, và được khuyến khích bởi những người AWS. – Paladin

10

Phải, bạn cần psycopg2 Mô-đun Python để thực thi lệnh COPY.

Mã của tôi trông như thế này:

import psycopg2 
#Amazon Redshift connect string 
conn_string = "dbname='***' port='5439' user='***' password='***' host='mycluster.***.redshift.amazonaws.com'" 
#connect to Redshift (database should be open to the world) 
con = psycopg2.connect(conn_string); 
sql="""COPY %s FROM '%s' credentials 
     'aws_access_key_id=%s; aws_secret_access_key=%s' 
     delimiter '%s' FORMAT CSV %s %s; commit;""" % 
     (to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,delim,quote,gzip) 

#Here 
# fn - s3://path_to__input_file.gz 
# gzip = 'gzip' 

cur = con.cursor() 
cur.execute(sql) 
con.close() 

tôi đã sử dụng boto3/psycopg2 viết CSV_Loader_For_Redshift

Các vấn đề liên quan