sql >> Databasteknik >  >> RDS >> PostgreSQL

RPostgreSQL - R-anslutning till Amazon Redshift - Hur man skriver/lägger upp större datamängder

Det kan vara för sent för OP, men jag lägger upp det här för framtida referens om någon hittar samma problem:

Stegen för att göra en bulkinsert är:

  • Skapa en tabell i Redshift med samma struktur som min dataram
  • Dela upp data i N delar
  • Konvertera delarna till ett format som kan läsas av Redshift
  • Ladda upp alla delar till Amazon S3
  • Kör COPY-satsen på Redshift
  • Ta bort de temporära filerna på Amazon S3

Jag har skapat ett R-paket som gör exakt detta, förutom det första steget, och det heter redshiftTools:https://github.com/sicarul/redshiftTools

För att installera paketet måste du göra:

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

Efteråt kommer du att kunna använda det så här:

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 trunkerar måltabellen och laddar den sedan helt från dataramen, gör bara detta om du inte bryr dig om den aktuella data den innehåller. Å andra sidan, rs_upsert_table ersätter rader som har sammanfallande nycklar och infogar de som inte finns i tabellen.




  1. Hur kör man flera mysql-frågor tillsammans i PHP?

  2. oracle diff:hur jämför man två tabeller?

  3. Array to String Conversion Error Symfony 3

  4. ORACLE SQL ORA-22814-attribut eller elementvärde är större än vad som anges i typ