【发布时间】:2022-08-04 22:03:56
【问题描述】:
我正在寻找这个问题的 R 解决方案。我的参数列表超过 18000 个,因此我尝试将其拆分为一个 for 循环,以便在每次迭代期间使用 2000 个参数运行查询(最后一次迭代除外,它可能少于 2000 个)。然而,它似乎是在每次迭代期间“存储”参数的某个地方,所以在第一次迭代之后它告诉我我达到了极限。如果我将它分成 1000 个块,它会在第二次迭代后分解。我的代码如下所示:
Start_List<-(some list of values)
for (i in 1:ceiling(length(List)/2000)) {
#Partition List into chunks of length 2000
List<-Start_List[2000*(i-1)+1:min(2000*i,length(Start_List))]
#Create qmarks for List
qmarks_List <- paste(rep(\"?\", length(List)), collapse = \",\")
#Query
query <- paste(\"
SELECT columns
FROM table
WHERE column IN (\", qmarks_List, \")
\")
loop_df <- dbGetQuery(db, query, params= c(as.list(List)))
#Store the query in a list
query_list[[i]]<-loop_df
}
如何清除参数,使其每次迭代都从 0 参数开始?
更新:2022 年 8 月 24 日仍在寻找解决此问题的方法。
-
我的解释:对于每个查询,
params的参数长度为 1000,当你这样做两次时,你会得到大约 2100 个参数的错误。有了这个,我已经重现了这种情况并且没有发现错误。我在 Windows 11 上使用 R-4.1.3、DBI-1.1.2、odbc-1.3.3,连接到 SQL Server 2016(内部版本 14393)。对我来说,您对qmarks_List长度的假设可能并不总是正确的,无论是由于Start_List的长度还是其他原因;这对我来说似乎是一个微不足道的论点,但我没有别的要说:-)
标签: sql r sql-server dbi