Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

R dan MySQL - memeriksa apakah ada baris dalam tabel sebelum menulisnya menggunakan dbWriteTable()

Pertimbangkan salah satu dari dua cara:solusi de-dupe berbasis SQL atau R-driven. Untuk yang pertama, Anda perlu menggunakan tabel staging sementara yang menjalankan LEFT JOIN...IS NULL/NOT EXISTS/NOT IN kueri SQL. Untuk yang terakhir, Anda akan mengimpor semua konten dalam kerangka data, menambahkan df Anda saat ini, dan menjalankan unique() R's . Namun, sepertinya Anda tidak berniat untuk yang terakhir tetapi saya tunjukkan untuk pembaca masa depan.

SQL (menggunakan tabel temp dengan struktur tabel tujuan yang tepat)

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

B (baca data tabel2, pertimbangkan jika tidak terlalu membebani sumber daya, lebih disukai jika menghilangkan duplikasi oleh semua kolom)

# 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. Konversi String ke Objek Datetime di SQL

  2. SQL, Inner join, ganti id dengan nama

  3. Tentukan apakah dua nama dekat satu sama lain

  4. menggunakan mysql regex_replace dengan ekspresi reguler

  5. Perilaku transaksi MySQL / PHP