दो तरीकों में से एक पर विचार करें:एक एसक्यूएल-चालित डी-डुप या आर-संचालित डी-डुप समाधान। पहले के लिए, आपको एक अस्थायी, स्टेजिंग टेबल के उपयोग की आवश्यकता होगी जो क्लासिक LEFT JOIN...IS NULL/NOT EXISTS/NOT IN
एसक्यूएल क्वेरी। बाद के लिए, आप सभी सामग्री को डेटाफ़्रेम में आयात करेंगे, अपने वर्तमान df को जोड़ेंगे, और R का unique()
चलाएंगे। . हालांकि, ऐसा लगता है कि आप बाद के लिए इरादा नहीं रखते हैं लेकिन मैं भविष्य के पाठकों के लिए दिखाता हूं।
एसक्यूएल (गंतव्य तालिका की सटीक संरचना के साथ एक अस्थायी तालिका का उपयोग करके)
# OVERWRITE TEMP EACH TIME
dbWriteTable(con_hub, value = my_R_dataframe,
name = "table2_temp",
overwrite = TRUE,
row.names = FALSE)
# RUN LEFT JOIN...IS NULL QUERY (COMPARE COLS --COL1, COL2, COL3-- ADD/REMOVE AS NEEDED)
dbSendQuery(con_hub, paste0("INSERT INTO table2",
" SELECT * FROM table2_temp",
" LEFT JOIN table2",
" ON table2_temp.col1 = table2.col1",
" AND table2_temp.col2 = table2.col2",
" AND table2_temp.col3 = table2.col3",
" WHERE table2.col1 IS NULL",
" OR table2.col2 IS NULL",
" OR table2.col3 IS NULL"))
आर (तालिका 2 डेटा में पढ़ें, विचार करें कि क्या संसाधनों पर बहुत अधिक कर नहीं लगाया गया है, यदि सभी स्तंभों द्वारा डी-डुपिंग को प्राथमिकता दी जाती है)
# RETRIEVE table2 DATA
table2df <- dbGetQuery(con_hub, "SELECT * FROM table2")
# APPEND BOTH DATAFRAMES
stackeddf <- rbind(table2df, my_R_dataframe)
# RETURN UNIQUE ROWS
finaldf <- unique(stackeddf)
# OVERWRITE DESTINATION TABLE EACH TIME
dbWriteTable(con_hub, value = finaldf,
name = "table2",
overwrite = TRUE,
row.names = FALSE)
# CLEAN UP ENVIRON OF UNNEEDED OBJECTS
rm(table2df, stackeddf, finaldf)
gc()