是否可以从PostgreSQL读取data.table?

rmc*_*key 8 r rpostgresql data.table

我正在对PostgreSQL数据库中存储的大量数据进行一些分析.出于速度和内存的原因,我正在使用该data.table软件包.目前我这样做是为了阅读数据.

library(RPostgreSQL)
library(data.table)
...
query <- "SELECT * FROM eqtl"
data <- as.data.table(dbGetQuery(con, query))
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点,不涉及将整个事物读入a data.frame然后将其复制到一个data.table.

jan*_*cki 2

正如阿伦在评论中指出的那样,你可以只使用setDT结果dbGetQuery

此外,我的包dwtools中有一个辅助函数,可以在需要时扩展此功能以实现自动setkey。这被设计为在链接时有用。它还统一了与其他数据库供应商的接口,以便您可以使用不同的数据库链接 data.table。
简单的选择用法如下所示:

my_dt = db("SELECT * FROM eqtl")
# to setkey use
db("SELECT * FROM eqtl", key="mykeycol")
Run Code Online (Sandbox Code Playgroud)

软件包手册中的大量扩展示例:

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
                    ]
Run Code Online (Sandbox Code Playgroud)

它会从多个数据库读取数据、连接、聚合、将中间结果保存到多个数据库。