2015-08-12 2 views
2

Я использую RMySQL для запроса базы данных.dbSendQuery возвращает только 500 строк при использовании RMySQL в R

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

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 без каких-либо успехов.

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

Followup

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

dbReadTable(con, 'some_table')

ответ

6

То, что вы видите, это нормальное поведение. Реализации 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) 
+0

Большое спасибо за ваши советы. У меня возникли проблемы с поиском хорошей информации о пакете RMySQL. Похоже, что это было бы очень популярно и широко используется, но даже на SO, есть только ~ 175 вопросов с этим тегом. –

+0

Странно, это даже кажется, что «n = -1» является настройкой по умолчанию, если вы посмотрите раздел справки или распечатаете исходный код в консоли R. –

0

Эта ссылка помогла так много использовать RMySQL пакет полезным способом: Accessing MySQL through R

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

Я надеюсь, что вам это понравится. Это было для меня.

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

R interface to the MySQL database

Accessing MySQL through R

Смежные вопросы