2016-09-30 2 views
0

Сравнение базы SAS с RODBC в R для доступа к базам данных ORACLE SQl.Исключение тысяч наблюдений с использованием RODBC

Я пытаюсь получить доступ к базе данных ORACLE SQL. Если я запускаю это в SAS с этим кодом:

LIBNAME LIBNAME ORACLE SCHEMA=SCHEMA PATH="*****"; 

PROC SQL ; 
CREATE TABLE work.eval_view AS 
SELECT * 
    FROM LIBNAME.VW_EVALUATION 
    ORDER BY ***** ; 
QUIT; 

Если я запускаю этот код, я получаю 153777 наблюдения, что и я бы ожидать.

Затем я хочу запустить этот код в R. Я использую библиотеку RODBC. Это код, который я запускаю:

connect <- odbcConnect(dsn='****', rows_at_time =1, believeNRows=FALSE) 

evaluation <- sqlQuery(connect, "SELECT * FROM ****.vw_evaluation") 

Но я получаю 4239 наблюдений. Фактические наблюдения, которые поступают, такие же, как те, которые поступают из SAS, просто большинство наблюдений отсутствуют.

Если я изменяю вход rows_at_time, я меняю количество наблюдений, которые я получаю. 100 за один раз получает мне 10219 наблюдений, 110 за один раз получите меня меньше наблюдений, всего 10120 наблюдений.

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

+1

Насколько широк ваш стол и у вас очень большие текстовые поля? Это может повлиять на распределение памяти. Попробуйте выбрать несколько столбцов. Подумайте об использовании 'odbcQuery()' и 'sqlGetResults()' over 'sqlQuery()' (оболочка для двух). Играйте с такими аргами, как * believeNRows * и * max = 0 *. Даже попробуйте 'sqlTable()' над вызовом запроса. См. Стр. 18 из [документации RODBC] (https://cran.r-project.org/web/packages/RODBC/RODBC.pdf). – Parfait

+0

Большое текстовое поле было преступником, спасибо большое. – dncrwlye

ответ

0

Я бы устранил ошибку, проверив с помощью пакета ROracle, который работает с пакетом DBI для подключения к базе данных. У меня нет доступа к базе данных Oracle для тестирования, но при попытке второго пакета вы узнаете, связана ли проблема с вашим интерфейсом базы данных или чем-то еще.

Обратите внимание, что ROracle, по-видимому, поддерживается самим Oracle, и, надеюсь, он хорошо поддерживается. Я использовал DBI совсем немного, чтобы взаимодействовать с базами данных MySQL (RMySQL) и SQLite (RSQLite) и не возникало проблем с возвратом очень больших наборов данных.

0

Parfait был прав! Проблема заключалась в столбце «раздел комментария», который содержал длинные строки. Как только этот столбец не был импортирован, я получил все строки, которые я ожидал.