sql >> Databáze >  >> RDS >> Mysql

R a MySQL - kontrola, zda existuje řádek v tabulce před zápisem do tabulky pomocí dbWriteTable()

Zvažte jeden ze dvou způsobů:řešení dedupe řízené SQL nebo R řízené řešení dedupe. V prvním případě byste potřebovali použít dočasnou pracovní tabulku, která spouští klasický LEFT JOIN...IS NULL/NOT EXISTS/NOT IN SQL dotaz. V druhém případě byste importovali veškerý obsah v datovém rámci, přidali svůj aktuální soubor df a spustili R's unique() . Zdá se však, že nemáte v úmyslu to druhé, ale ukážu to budoucím čtenářům.

SQL (pomocí dočasné tabulky s přesnou strukturou cílové tabulky)

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

R (přečtěte si údaje v tabulce 2, zvažte, zda příliš nezatěžují zdroje, upřednostňujte odstranění duplicit ve všech sloupcích)

# 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()



  1. Chyba MySQL:Mimo rozsah pro sloupec „částka“ na řádku 1

  2. Jak funguje operátor LIKE v SQLite

  3. Xampp MS SQL server PHP 5.6

  4. Dotaz MySQL:Dotaz na všechny položky starší než 1 rok