1 Jak przekazać wiele identyfikatorów partiami i połączyć je w R

pytanie utworzone w Thu, Mar 28, 2019 12:00 AM

Mam poniżej wymienioną ramkę danych w R.

DF1

ID       Sales         Cost       Value
RTT-123  10            10000      15000
RTT-456  15            12000      17000
RTT-789  14            14000      19000

Ramka danych zawiera prawie ~ 30K unikatowych identyfikatorów, podczas przekazywania tych identyfikatorów do redshift przy użyciu poniższego zapytania, otrzymuję błąd Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :

Jak przekazać te Idy automatycznie w partii identyfikatorów 2K podczas kwerendy, a następnie scalić dane wyjściowe w jedną pojedynczą ramkę danych w R.

Zapytanie:

df2<-paste0("SELECT ID,list1,list2, date1 FROM table1 b
            WHERE b.ID IN (", paste(shQuote(DF1$ID , type = "sh"),collapse = ','),");")

output<-dbGetQuery(link,df2)
    
2
1 odpowiedzi                              1                         

Coś w tym stylu (nie testowane), tutaj używamy 1000 identyfikatorów naraz, dostosuj je do swoich potrzeb:

library(data.table) # rbindlist

output <- rbindlist(
  lapply(
    # 1000 chunks
    split(DF1$ID, ceiling(seq_along(DF1$ID)/1000)), 
    function(i){
      df2 <- paste0("SELECT ID,list1,list2, date1 FROM table1 b
                     WHERE b.ID IN (",
                    paste(shQuote(i , type = "sh"), collapse = ','),
                    ");")
      dbGetQuery(link, df2)
    }))
    
0
2019-03-28 11: 48: 39Z
źródło umieszczone tutaj