我正在对Postgresql数据库中存储的大量数据进行一些分析.出于速度和内存的原因,我正在使用data.table包.目前我这样做是为了阅读数据.
library(RPostgresql) library(data.table) ... query <- "SELECT * FROM eqtl" data <- as.data.table(dbGetQuery(con,query))
我想知道是否有更好的方法来执行此操作,不涉及将整个事物读入data.frame,然后将其复制到data.table中.
正如Arun在评论中指出的那样,你可以在dbGetQuery结果上使用setDT.
原文链接:https://www.f2er.com/postgresql/192070.html此外,我的软件包dwtools中还提供了一个帮助程序功能,可在需要时为自动setkey扩展此功能.这被设计为在链接时很有用.它还将接口统一到其他数据库供应商,以便您可以使用不同的数据库链接data.table.
简单的选择用法如下:
my_dt = db("SELECT * FROM eqtl") # to setkey use db("SELECT * FROM eqtl",key="mykeycol")
从包装手册中大量扩展的例子:
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 ][,keyby=c("time_code","geog_region_name")] # aggr ][,auto.table.name ][,db("time",key="time_code" # read lookup time dim from db )[.SD # left join time ][,keyby=c("geog_region_name","time_month_code","time_month_name")] # aggr ][,auto.table.name ]