Mysql
 sql >> база данни >  >> RDS >> Mysql

R и MySQL - проверка дали ред съществува в таблица, преди да се запише в нея с помощта на dbWriteTable()

Помислете за един от двата начина:решение за дедупиране, управлявано от SQL, или решение за дедупиране, управлявано от R. За първото ще ви е необходима временна, етапна таблица, която изпълнява класическия LEFT JOIN...IS NULL/NOT EXISTS/NOT IN SQL заявка. За последно ще импортирате цялото съдържание в рамка с данни, ще добавите текущия си df и ще изпълните unique() на R . Въпреки това изглежда, че не възнамерявате последното, но ще го покажа за бъдещите читатели.

SQL (с помощта на временна таблица с точна структура на целевата таблица)

# 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 (прочетете данните от таблица 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()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. използване на auto_increment в съставен ключ

  2. MYSQL - Какво прави STRAIGHT_JOIN в този код?

  3. Как да синхронизирам две MySQL таблици?

  4. Услугата MySQL57 на локален компютър стартира и след това спря

  5. Съхраняване на водещи нули на цели числа в базата данни на MySQL като INTEGER