dbGetQuery 和 dbReadTable 无法 return 非常大的 table DBI
dbGetQuery and dbReadTable failing to return a really large table DBI
我有一个非常大的 table(800 万行)需要导入到 R 中,我将对其进行一些处理。问题是当我尝试使用 DBI 包将它引入 R 时出现错误
我的代码如下
options(java.parameters = "-Xmx8048m")
psql.jdbc.driver <- "../postgresql-42.2.1.jar"
jdbc.url <- "jdbc:postgresql://server_url:port"
pgsql <- JDBC("org.postgresql.Driver", psql.jdbc.driver, "`")
con <- dbConnect(pgsql, jdbc.url, user="", password= '')
tbl <- dbGetQuery(con, "SELECT * FROM my_table;")
我得到的错误是
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
Unable to retrieve JDBC result set for SELECT * FROM my_table; (Ran out of memory retrieving query results.)
我能理解,因为结果集太大了,但我不确定如何分批检索而不是全部检索。我试过使用 dBSendQuery、dbReadTable 和 dbGetQuery,它们都给出相同的错误。
如有任何帮助,我们将不胜感激!
我通过使用 RPostgreSQL 包而不是默认的 RJDBC 和 DBI 包让它工作。
它能够执行 sendQuery,然后递归地使用 fetch 来获取 10,000 块的数据。
main_tbl <- dbFetch(postgres_query, n=-1) #didnt work so tried in chunks
df<- data.frame()
while (!dbHasCompleted(postgres_query)) {
chunk <- dbFetch(postgres_query, 10000)
print(nrow(chunk))
df = rbind(df, chunk)
}
我有一个非常大的 table(800 万行)需要导入到 R 中,我将对其进行一些处理。问题是当我尝试使用 DBI 包将它引入 R 时出现错误
我的代码如下
options(java.parameters = "-Xmx8048m")
psql.jdbc.driver <- "../postgresql-42.2.1.jar"
jdbc.url <- "jdbc:postgresql://server_url:port"
pgsql <- JDBC("org.postgresql.Driver", psql.jdbc.driver, "`")
con <- dbConnect(pgsql, jdbc.url, user="", password= '')
tbl <- dbGetQuery(con, "SELECT * FROM my_table;")
我得到的错误是
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
Unable to retrieve JDBC result set for SELECT * FROM my_table; (Ran out of memory retrieving query results.)
我能理解,因为结果集太大了,但我不确定如何分批检索而不是全部检索。我试过使用 dBSendQuery、dbReadTable 和 dbGetQuery,它们都给出相同的错误。
如有任何帮助,我们将不胜感激!
我通过使用 RPostgreSQL 包而不是默认的 RJDBC 和 DBI 包让它工作。 它能够执行 sendQuery,然后递归地使用 fetch 来获取 10,000 块的数据。
main_tbl <- dbFetch(postgres_query, n=-1) #didnt work so tried in chunks
df<- data.frame()
while (!dbHasCompleted(postgres_query)) {
chunk <- dbFetch(postgres_query, 10000)
print(nrow(chunk))
df = rbind(df, chunk)
}