Na OP může být příliš pozdě, ale zveřejním to zde pro budoucí použití, pokud někdo najde stejný problém:
Postup hromadného vkládání je následující:
- Vytvořit tabulku v Redshift se stejnou strukturou jako můj datový rámec
- Rozdělte data na N částí
- Převeďte části do formátu čitelného funkcí Redshift
- Nahrajte všechny díly do Amazon S3
- Spusťte příkaz COPY na Redshift
- Smažte dočasné soubory na Amazon S3
Vytvořil jsem balíček R, který dělá přesně toto, kromě prvního kroku, a jmenuje se redshiftTools:https://github.com/sicaul/redshiftTools
Chcete-li balíček nainstalovat, musíte provést:
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")
Poté jej budete moci používat takto:
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
zkrátí cílovou tabulku a poté ji zcela načte z datového rámce, proveďte to pouze v případě, že se nestaráte o aktuální data, která obsahuje. Na druhé straně rs_upsert_table
nahradí řádky, které mají shodné klíče, a vloží ty, které v tabulce neexistují.