sql >> Database >  >> RDS >> PostgreSQL

RPostgreSQL - R-verbinding met Amazon Redshift - Grotere datasets SCHRIJVEN/posten

Het is misschien te laat voor de OP, maar ik zal dit hier posten voor toekomstig gebruik als iemand hetzelfde probleem vindt:

De stappen om een ​​bulkinvoeging te doen zijn:

  • Maak een tabel in Redshift met dezelfde structuur als mijn dataframe
  • Verdeel de gegevens in N delen
  • Converteer de onderdelen naar een formaat dat leesbaar is voor Redshift
  • Upload alle onderdelen naar Amazon S3
  • Voer de COPY-opdracht uit op Redshift
  • Verwijder de tijdelijke bestanden op Amazon S3

Ik heb een R-pakket gemaakt dat precies dit doet, behalve de eerste stap, en het heet redshiftTools:https://github.com/sicarul/redshiftTools

Om het pakket te installeren, moet u het volgende doen:

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

Daarna kun je het als volgt gebruiken:

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 kapt de doeltabel af en laadt deze vervolgens volledig uit het dataframe, doe dit alleen als u niet geïnteresseerd bent in de huidige gegevens die erin staan. Aan de andere kant, rs_upsert_table vervangt rijen die samenvallende sleutels hebben en voegt die in die niet in de tabel voorkomen.




  1. kies uit enkele tabellen mysql

  2. Tel records in mysql-tabel als verschillende kolommen, afhankelijk van verschillende waarden van een kolom

  3. Hoe kan ik gegevens in twee tabellen tegelijk INVOEREN in SQL Server?

  4. Niet tevredenLinkError in native methode