2012-11-08 14 views
8

Sto lavorando con un database Oracle e mi piace recuperare una tabella con 30 milioni di record.Accelerare sqlFetch()

library(RODBC) 
ch <- odbcConnect("test", uid="test_user", 
        pwd="test_pwd", 
        believeNRows=FALSE, readOnly=TRUE) 
db <- sqlFetch(ch, "test_table") 

Per 1 milione di record il processo richiede 1074,58 sec. Quindi, ci vuole un po 'di tempo per tutti i 30 milioni di dischi. C'è qualche possibilità di accelerare il processo?

Apprezzerei qualsiasi aiuto. Grazie.

+2

RODBC contro Oracle è pazzo lento. Eseguire il dump su un csv locale alla fine del database, trasferire su file sharing di rete e quindi caricare in R tramite sqldf :: read.csv.sql. Vedi: http://www.cerebralmastication.com/2009/11/loading-big-data-into-r/ – Hansi

+0

Grazie per il link. Hai esperienza se il pacchetto "ROracle" è migliore in termini di prestazioni? Per me, sembra davvero controintuitivo creare una discarica. – majom

+0

@majom Al lavoro, devo scrivere query su un data warehouse Oracle e trascinare i dati in R è dolorosamente lento. Non sono mai riuscito a far funzionare Roracle. Invece di sqlFetch, provo a scrivere query mirate per ottenere i dati di cui ho bisogno. Ciò minimizza il trasferimento dei dati (un po ') e sfrutta la velocità Oracle in-database. Non lavoro con dati grandi come i tuoi, quindi il mio processo si adatta alle mie esigenze (per ora). Non ideale, ma funziona. – Btibert3

risposta

0

Si potrebbe provare a effettuare una chiamata di sistema tramite il terminale R a una shell mySQL utilizzando il comando system(). Elabora i tuoi dati esternamente e carica solo ciò che ti serve come output.