2017-05-19 15 views
0

私はSQLのworkbench/Jを使ってredshiftクラスタとやりとりしていますが、私はredshiftテーブルにCSVファイル(約500k行)をロードしたいと思いますCOPYコマンドを使って(私はs3にコピーする特権を持っていないので)。S3を通過せずにcsvをredshiftにロードする

可能かどうかを知っていますか(多分挿入してください)。はいの場合は手伝ってください。

私が持つ唯一の特権は、クラスタ内のテーブルの選択、挿入、更新、削除です。

ありがとうございました。

+0

私の知るところでは、これはpythonスクリプトを使用して行うことができます。 –

+1

私はS3なしでこれをやろうとしていることは知っていますが、 'copy'コマンドはこのユースケースには完璧です。 SQL Workbench/Jで 'insert'をしたくないと約束します。それは500K行では実行不可能な時間がかかるでしょう。 dev-opsの人々にS3バケットへのアクセスを得るように頼んでください。 –

答えて

0

COPYコマンドは、データをRedshiftにロードする最も良い方法です。他の唯一の方法はpyscopg2を使用してpythonスクリプトを使用して、INSERTのデータを行単位で転送することです。INSERT Redshiftへの接続を確立した後にSQLクエリを実行します。

ので、ちょうどラインでCSVファイルの行に反復し、すべての行の上にINSERTクエリを実行:row[0],row[1],row[2],row[3]は、行内のすべての列のデータである

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])) 

ところ。

行単位のINSERTは、コマンドがCOPYコマンドより遅く、効率が悪いことに注意してください。

関連する問題