gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:48:33 24 4
gpt4 key购买 nike

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

library(RPostgreSQL)
library(data.table)
...
query <- "SELECT * FROM eqtl"
data <- as.data.table(dbGetQuery(con, query))

我想知道是否有更好的方法来做到这一点,而不是将整个内容读入 data.frame。然后将其复制到 data.table .

最佳答案

正如 Arun 在评论中指出的那样,您可以使用 setDTdbGetQuery结果。

此外,我的包中还有一个辅助函数 dwtools它将此功能扩展到自动 setkey需要的时候。这被设计为在链接时很有用。它还统一了与其他数据库供应商的接口(interface),因此您可以使用不同的数据库链接 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
][,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
]

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

关于r - 是否可以从 PostgreSQL 读取 data.table ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375191/

24 4 0