2017-05-19 38 views
0

我正在使用SQL workbench/J與紅移羣集進行交互,我想將一個CSV文件(大約500k行)加載到紅移表中(我有插入特權)使用COPY命令(因爲我沒有權限複製到S3)。加載csv紅移而不經過S3

你知道是否可行(使用可能插入),如果是的話,你能幫我嗎?

請注意我唯一的權限是:選擇,插入,更新和刪除集羣內的表。

謝謝。

+0

據我所知,你可以通過使用python腳本來做到這一點。 –

+1

我知道你要做這個_without_ S3,但'copy'命令對於這個用例來說是完美的。我保證你不會想用SQL Workbench/J執行'insert';這將需要500 K行不可行的時間。你可以讓你的開發人員讓你訪問S3存儲桶嗎? –

回答

0

COPY命令是將數據加載到Redshift的最佳方式。唯一的另一種方式是逐行對INSERT數據執行操作,這可以通過使用pyscopg2在建立到Redshift的連接後運行INSERT SQL查詢的Python腳本完成。

所以,只是想迭代通過行的CSV文件行,所有行的執行INSERT查詢:

import psycopg2 
conn = psycopg2.connect("dbname = 'your_db_name' user= 'your_user' host='redshift_cluster_endpoint_without_port_number' port='port_number' password='password'") 
cur = conn.cursor() 
for row in rows: 
    cur.execute("INSERT INTO TABLE_NAME VALUES(%s,%s,%s,%s)" %(row[0],row[1],row[2],row[3])) 

哪裏row[0],row[1],row[2],row[3]是你的數據在一個行的所有列。

請記住,逐行插入將比COPY命令更慢,效率更低。