Как собрать данные из будущего запроса dplyr после сбоя?

Часто, когда я пытаюсь собрать много данных из базы данных SQL Server, я получаю загадочное сообщение об ошибке от драйвера nanodbc. Например,

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

Ошибка в result_fetch (res @ ptr, n, ...): nanodbc / nanodbc.cpp: 2525: 08S01: [Microsoft] [Драйвер ODBC 11 для SQL Server] Поставщик SSL: [err

Результат уже удален

С этого момента я получаю сообщение об ошибке

Ошибка: 'SELECT * FROM "результат" AS "zzz13" WHERE (0 = 1)' nanodbc / nanodbc.cpp: 1587: 08S01: [Microsoft] [Драйвер ODBC 11 для SQ

всякий раз, когда я пытаюсь собрать данные из таблицы в базе данных. Это продолжается до тех пор, пока я не перезапущу сеанс R.

Кто-нибудь видел такое поведение раньше или может предоставить способ его исправить?


person wdkrnls    schedule 23.01.2018    source источник


Ответы (1)


Один случай, когда эта ошибка определенно возникает: когда в таблице есть столбец типа varchar. вы можете проверить это, просто щелкнув панель подключений в rstudio, перейдя в соответствующую таблицу и проверив типы столбцов.

если проблемный столбец 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()

должно сработать.

person Prasanna    schedule 22.08.2018
comment
Кажется, что столбцы varchar (max) должны быть помещены в конец операторов SELECT при использовании SQL Server github.com/r-dbi/odbc/issues/10 - person zola25; 08.01.2019