失败后如何从未来的 dplyr 查询中收集数据?

How to collect data from future dplyr query after one fails?

当我尝试从 SQL 服务器数据库收集大量数据时,我经常会收到来自 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

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

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

肯定会出现此错误的一种情况: 当 table 中有 varchar 类型列时。 您可以通过单击 rstudio 中的连接窗格,转到相关 table 并检查列类型来检查这一点。

如果麻烦的列是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()

应该可以。