dbSendQuery возвращает только 500 строк при использовании RMySQL в R

Я использую RMySQL для запроса базы данных.

я использовал

df <- fetch(dbSendQuery(con, "SELECT some_col from some_table"))

и получил обратно это сообщение:

Error in fetch(dbSendQuery(con, "SELECT some_col from some_table")) : 
  error in evaluating the argument 'res' in selecting a method for function 'fetch': Error in .local(conn, statement, ...) : 
  connection with pending rows, close resultSet before continuing

Как ни странно, df действительно был создан; 500 obs. of 1 variables, и это вернуло мне то, что я ожидал от этих 500.

  • Таблица some_table содержит 292 000 строк, что не должно быть проблемой для R.

  • Я пробовал использовать множество других таблиц в своей схеме (например, some_other_table) и получил тот же результат. Так что, похоже, это что-то связанное с самой функцией fetch.

  • Я пытался использовать dbGetQuery и dbFetch безуспешно.

Что означает эта ошибка и как мне получить все строки в моей таблице?

ПОСЛЕДУЮЩИЕ

Я обнаружил, что могу поглощать всю таблицу, используя

dbReadTable(con, 'some_table')


person tumultous_rooster    schedule 12.08.2015    source источник


Ответы (2)


То, что вы видите, является нормальным поведением. Реализации RMySQL извлекают только n записей, а если n отсутствует, возвращается только до fetch.default.rec, как указано в вызове MySQL (500 по умолчанию).

Чтобы вернуть все строки, используйте n = -1.

Кроме того, полезно присвоить имя всей строке запроса, а затем просто передать это имя оператору fetch().

drv <- dbDriver("MySQL")
con <- dbConnect(drv, user = "username", password="password1", 
                 host = "localhost", dbname="database")
res <- dbSendQuery(con, statement = paste(
                      "SELECT some_column1, some_column2",
                      "FROM some_table", 
                      "WHERE some_column2 >= x",
                      "ORDER BY some_column1"))
data1 <- fetch(res, n = -1)   
person scribbles    schedule 13.08.2015
comment
Большое спасибо за ваш совет. У меня возникли проблемы с поиском хорошей информации о пакете RMySQL. Похоже, что это будет очень популярно и широко используется, но даже на SO есть только ~ 175 вопросов с этим тегом. - person tumultous_rooster; 13.08.2015
comment
Как ни странно, даже кажется, что «n = -1» является настройкой по умолчанию, если вы посмотрите раздел справки или распечатаете исходный код в консоли R. - person stats_guy; 13.01.2017

Эта ссылка очень помогла использовать пакет RMySQL полезным способом: Доступ к MySQL через R

Это также включает в себя то, что вы должны передать параметр n=-1 функции fetch для получения всех данных, а не только первого 500 rows, который установлен по умолчанию в функции fetch.

Надеюсь, это поможет вам, как помогло мне.

Другие полезные ссылки:

интерфейс R к базе данных MySQL

Доступ к MySQL через R

person sarah    schedule 04.02.2016