RODBC 包:数据库中的 Select 行 table 匹配 R 向量中的值
RODBC-Package: Select rows in a database table that match values in an R-vector
我在一个 R 向量 (ids) 和一个包含列名 "IDnr"、"V1" 和 "V2" 以及大约 1.6 Mio 行。
我想要 select 行 dbo.datafromhell 中的 ID 号 (IDnr) 与 "ids"
中的值相匹配
ids <- c(1,2,3,4) #in real: 150'000 id-numbers
我尝试使用 "where-in-list" 语句进行以下查询,但它占用了大量资源并因错误而终止:
df <- sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(ids,sep="",collapse=","),")"))
我想我的值列表 (ids) 对于 "where-in-list" 语句来说太大了。
最后我想要一个数据框,它只包含值列表和数据库之间具有匹配 ID 的行 table:
IDnr V1 V2
1 A TRUE
2 B FALSE
3 C TRUE
4 D FALSE
#in real: about 150'000 rows (different IDnr)
我还尝试编写一个将数据库 table 直接连接到我的值列表的 sqlQuery。但我想不通。
非常感谢任何帮助!
禁食选项是将 150.000 个 ID 保存到数据库中的暂存 table,然后在两个 table 上创建查询。
一个(缓慢的)解决方法是将您的 ids
分成大小可控的块,运行 对每个块进行查询,rbind
所有结果。像这样:
#define how big is manageable
manSize<-1000
do.call(rbind,
lapply(split(ids,seq_along(ids)%/%manSize),
function(x) sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(x,sep="",collapse=","),")"))))
我在一个 R 向量 (ids) 和一个包含列名 "IDnr"、"V1" 和 "V2" 以及大约 1.6 Mio 行。
我想要 select 行 dbo.datafromhell 中的 ID 号 (IDnr) 与 "ids"
中的值相匹配ids <- c(1,2,3,4) #in real: 150'000 id-numbers
我尝试使用 "where-in-list" 语句进行以下查询,但它占用了大量资源并因错误而终止:
df <- sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(ids,sep="",collapse=","),")"))
我想我的值列表 (ids) 对于 "where-in-list" 语句来说太大了。
最后我想要一个数据框,它只包含值列表和数据库之间具有匹配 ID 的行 table:
IDnr V1 V2
1 A TRUE
2 B FALSE
3 C TRUE
4 D FALSE
#in real: about 150'000 rows (different IDnr)
我还尝试编写一个将数据库 table 直接连接到我的值列表的 sqlQuery。但我想不通。
非常感谢任何帮助!
禁食选项是将 150.000 个 ID 保存到数据库中的暂存 table,然后在两个 table 上创建查询。
一个(缓慢的)解决方法是将您的 ids
分成大小可控的块,运行 对每个块进行查询,rbind
所有结果。像这样:
#define how big is manageable
manSize<-1000
do.call(rbind,
lapply(split(ids,seq_along(ids)%/%manSize),
function(x) sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(x,sep="",collapse=","),")"))))