OPには遅すぎるかもしれませんが、誰かが同じ問題を見つけた場合に後で参照できるように、ここに投稿します:
一括挿入を行う手順は次のとおりです。
- データフレームと同じ構造でRedshiftにテーブルを作成します
- データをN個の部分に分割します
- パーツをRedshiftで読み取り可能な形式に変換します
- すべてのパーツをAmazonS3にアップロードします
- RedshiftでCOPYステートメントを実行します
- AmazonS3の一時ファイルを削除します
最初のステップを除いて、これを正確に実行するRパッケージを作成しました。これはredshiftToolsと呼ばれます: https: //github.com/sicarul/redshiftTools
パッケージをインストールするには、次のことを行う必要があります。
install.packages('devtools')
devtools::install_github("RcppCore/Rcpp")
devtools::install_github("rstats-db/DBI")
devtools::install_github("rstats-db/RPostgres")
devtools::install_github("hadley/xml2")
install.packages("aws.s3", repos = c(getOption("repos"), "http://cloudyr.github.io/drat"))
devtools::install_github("sicarul/redshiftTools")
その後、次のように使用できるようになります:
library("aws.s3")
library(RPostgres)
library(redshiftTools)
con <- dbConnect(RPostgres::Postgres(), dbname="dbname",
host='my-redshift-url.amazon.com', port='5439',
user='myuser', password='mypassword',sslmode='require')
rs_replace_table(my_data, dbcon=con, tableName='mytable', bucket="mybucket")
rs_upsert_table(my_other_data, dbcon=con, tableName = 'mytable', bucket="mybucket", keys=c('id', 'date'))
rs_replace_table
ターゲットテーブルを切り捨ててから、データフレームから完全にロードします。これは、保持している現在のデータを気にしない場合にのみ行ってください。一方、rs_upsert_table
一致するキーを持つ行を置き換え、テーブルに存在しない行を挿入します。