sql-server - 失败后如何从 future 的 dplyr 查询中收集数据?

标签 sql-server r dplyr dbplyr

当我尝试从 SQL Server 数据库中收集大量数据时,我经常会收到来自 nanodbc 驱动程序的神秘错误消息。例如,

library(dplyr)
res <- collect(tbl(con, "result"))

Error in result_fetch(res@ptr, n, ...) : nanodbc/nanodbc.cpp:2525: 08S01: [Microsoft][ODBC Driver 11 for SQL Server]SSL Provider: [err

Result already cleared

从那以后,我得到了错误

Error: 'SELECT * FROM "result" AS "zzz13" WHERE (0 = 1)' nanodbc/nanodbc.cpp:1587: 08S01: [Microsoft][ODBC Driver 11 for SQ

每当我尝试从数据库中的表中收集数据时。这一直持续到我重新启动我的 R session 。

有没有人以前见过这种行为或者可以提供解决方法?

最佳答案

肯定会出现这个错误的一种情况: 当表中有 varchar 类型的列时。 您可以通过单击 rstudio 中的连接 Pane 、转到相关表并检查列类型来简单地检查这一点。

如果麻烦的列是varchar_col1,那么,

sometbl <- tbl(con, in_schema("schema_name","table_with_trouble"))
sometbl %>% head()

应该重现您的错误。

我不确定为什么会这样,但这里有一个解决方法:

sometbl <- tbl(con, in_schema("schema_name","table_with_trouble")) %>%
    mutate(alt_col1 = as.character(varchar_col1)) %>%
    select(-varchar_col1)
sometbl %>% head()

应该可以。

关于sql-server - 失败后如何从 future 的 dplyr 查询中收集数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407666/

相关文章:

r - 由 R 图的小箭头组成的线

r - 将多个字符串模式转换为二进制列

r - 将 yy.mmd(d) 日期格式转换为 R 中的 yyyy-mm-dd

sql-server - SQL Server 2014 : how long the stored procedures waited for lock

java - 为什么我们的连接池关闭?

sql - 如何获取所有自动生成的外键名称?

r - 使用 grep 按多列连接数据帧

r - 使用 R 为单个参数创建具有多个名称的函数

r - 来自 "local data frame"的 `dplyr:::print.tbl_df` 消息是什么意思?

c# - 如何使用 LLBLGen 连接具有条件的表?