2016-09-30 3 views
0

Vergleich der Basis-SAS mit RODBC in R für den Zugriff auf ORACLE SQl-Datenbanken.Tausende von Beobachtungen mit RODBC verlieren

Ich versuche, auf eine ORACLE SQL-Datenbank zuzugreifen. Wenn ich dies in SAS mit diesem Code ausführen:

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

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

Wenn ich diesen Code ausführen, erhalte ich 153.777 Beobachtungen, die, was ich erwarten würde.

Dann möchte ich diesen Code in R ausführen. Ich verwende die RODBC-Bibliothek. Dies ist der Code, den ich verwende:

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

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

Aber ich bekomme 4239 Beobachtungen. Die tatsächlichen Beobachtungen, die kommen, sind die gleichen wie die, die von SAS kommen, nur die Mehrheit der Beobachtungen fehlt.

Wenn ich den rows_at_time Eingang ändere, ändere ich die Anzahl der Beobachtungen, die ich bekomme. 100 zu einer Zeit bekomme ich 10219 Beobachtungen, 110 zu einer Zeit bekomme ich weniger Beobachtungen, nur 10120 Beobachtungen.

Hat jemand irgendwelche Vorschläge, wie Sie dieses Problem beheben können? Es scheint, dass Leute in anderen Threads vorgeschlagen haben, rows_at_time zu ändern, aber das funktioniert nicht so gut für mich.

+1

Wie breit ist Ihr Tisch und haben Sie sehr große Textfelder? Dies kann Auswirkungen auf die Speicherzuordnung haben. Versuchen Sie, einige Spalten auszuwählen. Verwenden Sie 'odbcQuery()' und 'sqlGetResults()' über 'sqlQuery()' (ein Wrapper für die beiden). Spiele mit den Argumenten wie * believeNRows * und * max = 0 *. Versuchen Sie sogar 'sqlTable()' über den Abfrageaufruf. Siehe Seite 18 von [RODBC-Dokumentation] (https://cran.r-project.org/web/packages/RODBC/RODBC.pdf). – Parfait

+0

Das große Textfeld war der Schuldige, vielen Dank. – dncrwlye

Antwort

0

Ich würde es beheben, indem Sie mit dem Paket testen, das mit dem DBI-Paket zum Herstellen einer Verbindung mit der Datenbank ausgeführt wird. Ich habe keinen Zugriff auf eine Oracle-Datenbank, mit der ich testen kann, aber wenn Sie ein zweites Paket testen, werden Sie wissen, ob das Problem mit Ihrer Datenbankschnittstelle oder etwas anderem zusammenhängt.

Beachten Sie, dass scheint von Oracle selbst gepflegt werden, und so wird hoffentlich gut unterstützt. Ich habe DBI ziemlich ein wenig benutzt, um mit MySQL- (RMySQL) und SQLite() Datenbanken in Verbindung zu treten, und hatte keine Probleme, sehr große Datasets zurückzugeben.

0

Parfait war korrekt! Das Problem war eine Spalte mit dem Kommentarabschnitt, die lange Strings enthielt. Sobald diese Spalte nicht importiert wurde, bekam ich alle Zeilen, die ich erwartet hatte.