Jak zauważył Arun w komentarzu, można po prostu użyć setDT
na dbGetQuery
wyników.
Dodatkowo w moim pakiecie dwtools dostępna jest funkcja pomocnicza, która w razie potrzeby rozszerza tę funkcję o auto setkey
. Zostało to zaprojektowane, by być użyteczne podczas łączenia. Ujednolica także interfejs dla innych dostawców baz danych, dzięki czemu można połączyć łańcuch danych przy użyciu różnych baz danych.
Prosta wybierz Wykorzystanie wola wygląda następująco:
my_dt = db("SELECT * FROM eqtl")
# to setkey use
db("SELECT * FROM eqtl", key="mykeycol")
Mocno dłuższy przykład z podręcznika pakiet:
jj_aggr = quote(list(amount=sum(amount), value=sum(value)))
r <- db("sales",key="geog_code" # read fact table from db
)[,eval(jj_aggr),keyby=c("geog_code","time_code") # aggr by geog_code and time_code
][,db(.SD) # write to db, auto.table.name
][,db("geography",key="geog_code" # read lookup geography dim from db
)[.SD # left join geography
][,eval(jj_aggr), keyby=c("time_code","geog_region_name")] # aggr
][,db(.SD) # write to db, auto.table.name
][,db("time",key="time_code" # read lookup time dim from db
)[.SD # left join time
][, eval(jj_aggr), keyby=c("geog_region_name","time_month_code","time_month_name")] # aggr
][,db(.SD) # write to db, auto.table.name
]
Byłoby odczytać dane z wielu baz danych, łączy, kruszywa, zapisywać wyniki pośrednie do wielu baz danych.
Być może nie jest to odpowiedź, której szukasz (?), Ale jeśli już ją odczytałeś jako 'data.frame', możesz użyć' setDT() 'aby przekonwertować ją na' data.table' * przez referencję * (konwersja powinna być natychmiastowa z data.frame do data.table) - tzn. 'data <- dbGetQuery (...); setDT (data) '. – Arun
@Arun dziękuję, prawdopodobnie to właśnie skończę, chociaż chciałbym usunąć 'dane.frame's z równania. – rmccloskey