sql >> Base de Datos >  >> RDS >> PostgreSQL

RPostgreSQL - Conexión de R a Amazon Redshift - Cómo ESCRIBIR/publicar conjuntos de datos más grandes

Puede que sea demasiado tarde para el OP, pero publicaré esto aquí para referencia futura si alguien encuentra el mismo problema:

Los pasos para hacer una inserción masiva son:

  • Crear una tabla en Redshift con la misma estructura que mi marco de datos
  • Dividir los datos en N partes
  • Convierta las partes a un formato legible por Redshift
  • Subir todas las partes a Amazon S3
  • Ejecute la instrucción COPY en Redshift
  • Elimine los archivos temporales en Amazon S3

Creé un paquete R que hace exactamente esto, excepto el primer paso, y se llama redshiftTools:https://github.com/sicarul/redshiftTools

Para instalar el paquete, deberá hacer lo siguiente:

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

Después, podrás usarlo así:

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 trunca la tabla de destino y luego la carga completamente desde el marco de datos, solo haga esto si no le importan los datos actuales que contiene. Por otro lado, rs_upsert_table reemplaza las filas que tienen claves coincidentes e inserta las que no existen en la tabla.