ओपी के लिए बहुत देर हो सकती है, लेकिन अगर किसी को एक ही समस्या मिलती है तो मैं इसे भविष्य के संदर्भ के लिए यहां पोस्ट करूंगा:
बल्क इंसर्ट करने के चरण हैं:
- मेरे डेटा फ़्रेम के समान संरचना के साथ Redshift में एक तालिका बनाएं
- डेटा को N भागों में विभाजित करें
- भागों को रेडशिफ्ट द्वारा पठनीय प्रारूप में परिवर्तित करें
- सभी भागों को Amazon S3 पर अपलोड करें
- COPY स्टेटमेंट को Redshift पर रन करें
- Amazon S3 पर अस्थायी फ़ाइलें हटाएं
मैंने एक 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
उन पंक्तियों को बदल देता है जिनमें मेल खाने वाली कुंजियाँ होती हैं, और जो तालिका में मौजूद नहीं होती हैं उन्हें सम्मिलित करता है।