我正在使用SQL workbench/J與紅移羣集進行交互,我想將一個CSV文件(大約500k行)加載到紅移表中(我有插入特權)使用COPY命令(因爲我沒有權限複製到S3)。加載csv紅移而不經過S3
你知道是否可行(使用可能插入),如果是的話,你能幫我嗎?
請注意我唯一的權限是:選擇,插入,更新和刪除集羣內的表。
謝謝。
我正在使用SQL workbench/J與紅移羣集進行交互,我想將一個CSV文件(大約500k行)加載到紅移表中(我有插入特權)使用COPY命令(因爲我沒有權限複製到S3)。加載csv紅移而不經過S3
你知道是否可行(使用可能插入),如果是的話,你能幫我嗎?
請注意我唯一的權限是:選擇,插入,更新和刪除集羣內的表。
謝謝。
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
命令更慢,效率更低。
您可以通過COPY命令從遠程主機加載數據。看到http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html
據我所知,你可以通過使用python腳本來做到這一點。 –
我知道你要做這個_without_ S3,但'copy'命令對於這個用例來說是完美的。我保證你不會想用SQL Workbench/J執行'insert';這將需要500 K行不可行的時間。你可以讓你的開發人員讓你訪問S3存儲桶嗎? –