Почему sqlQuery от RODBC не всегда возвращает одни и те же данные при запросе базы данных Impala?

Я пытаюсь получить некоторые данные из базы данных Impala, используя функцию sqlQuery из пакета RODBC. Результаты, которые я получаю, меняются от одного выполнения запроса к другому выполнению того же самого запроса.

Data.frame, который я получаю, не всегда имеет одинаковое количество строк:

library("RODBC")
conn <- odbcConnect("Cloudera Impala DSN;host=mydb;port=21050")    
df<-sqlQuery(conn, "select * from hydrau.hydr where flight= 'V0051'")
dim(df)
[1] 26600   220
df<-sqlQuery(conn, "select * from hydrau.hydr where flight= 'V0051'")
dim(df)
[1] 142561   220
df<-sqlQuery(conn, "select * from hydrau.hydr where flight= 'V0051'")
dim(df)
[1] 23500   220

Фактически этот запрос должен возвращать кадр данных размером 142561 x 220.

С другой стороны, следующий запрос всегда возвращает один и тот же (правильный) результат:

sqlQuery(conn, "select count(*) from hydr where flight= 'V0051' ")
  count(*)
1   142561

person mdebbiche    schedule 26.05.2016    source источник
comment
Вы используете 32-битный или 64-битный ODBC?   -  person George Dontas    schedule 26.05.2016
comment
@GeorgeDontas 64bit   -  person mdebbiche    schedule 26.05.2016
comment
Вы пытались установить для аргумента believeNRows значение FALSE?   -  person eminik    schedule 26.05.2016
comment
@eminik Да, я пробовал, но ничего не изменилось. Кстати, не странно ли, что этот аргумент вообще существует? Почему количество строк, возвращаемых соединением ODBC, не должно быть правдоподобным?   -  person mdebbiche    schedule 26.05.2016
comment
Я думаю, что у меня была похожая проблема (подключение к другой базе данных) с 64-битной, и теперь я использую 32-битную.   -  person George Dontas    schedule 27.05.2016
comment
@GeorgeDontas Что ж, я пытался последовать вашему совету, но знаю, что получаю эту ошибку: не удается открыть lib '/opt/cloudera/impalaodbc/lib/32/libclouderaimpalaodbc32.so': файл не найден при вызове odbcConnect, хотя этот файл существует по адресу указанный путь, а file.exists("/opt/cloudera/impalaodbc/lib/32/libclouderaimpalaodbc32.so") возвращает TRUE   -  person mdebbiche    schedule 27.05.2016
comment
Со мной произошло то же самое, а также многое другое с пакетом RODBC. Мало того, что количество возвращаемых строк в некоторых случаях варьировалось случайным образом, данные, которые я получил, были неправильными в некоторых строках. Как будто данные были смещены на строку по каким-то переменным, такого я еще не встречал. Даже пробовал 32-битные и 64-битные драйверы ODBC и тот же результат. Выполнил точно такой же запрос в других программах, и он работал нормально. Решение в R состояло в том, чтобы переключиться на пакет DBI, и я, вероятно, никогда больше не буду использовать пакет RODBC.   -  person GeoffDS    schedule 02.06.2021


Ответы (1)


Кажется, моя проблема заключалась в том, что у Impala не хватало памяти для хорошей работы.

person mdebbiche    schedule 27.05.2016
comment
Как вы обнаружили, что у impala недостаточно памяти для хорошей работы? - person M. Alexandru; 06.09.2019