私はSQLのworkbench/Jを使ってredshiftクラスタとやりとりしていますが、私はredshiftテーブルにCSVファイル(約500k行)をロードしたいと思いますCOPYコマンドを使って(私はs3にコピーする特権を持っていないので)。S3を通過せずにcsvをredshiftにロードする
可能かどうかを知っていますか(多分挿入してください)。はいの場合は手伝ってください。
私が持つ唯一の特権は、クラスタ内のテーブルの選択、挿入、更新、削除です。
ありがとうございました。
私はSQLのworkbench/Jを使ってredshiftクラスタとやりとりしていますが、私はredshiftテーブルにCSVファイル(約500k行)をロードしたいと思いますCOPYコマンドを使って(私はs3にコピーする特権を持っていないので)。S3を通過せずにcsvをredshiftにロードする
可能かどうかを知っていますか(多分挿入してください)。はいの場合は手伝ってください。
私が持つ唯一の特権は、クラスタ内のテーブルの選択、挿入、更新、削除です。
ありがとうございました。
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
コマンドより遅く、効率が悪いことに注意してください。
COPYコマンドを使用すると、リモートホストからデータをロードできます。 http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html
私の知るところでは、これはpythonスクリプトを使用して行うことができます。 –
私はS3なしでこれをやろうとしていることは知っていますが、 'copy'コマンドはこのユースケースには完璧です。 SQL Workbench/Jで 'insert'をしたくないと約束します。それは500K行では実行不可能な時間がかかるでしょう。 dev-opsの人々にS3バケットへのアクセスを得るように頼んでください。 –