2012-11-08 20 views
8

Pracuję z bazą danych Oracle i lubię pobrać tabelę z 30 milionami rekordów.Przyspieszenie sqlFetch()

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

Dla 1 miliona rekordów proces wymaga 1074,58 sekundy. Tym samym zajmuje to sporo czasu dla wszystkich 30 milionów rekordów. Czy istnieje możliwość przyspieszenia tego procesu?

Byłbym wdzięczny za każdą pomoc. Dzięki.

+2

RODBC przeciwko Oracle jest szalony powolny. Zrzuć do lokalnego pliku csv na końcu bazy danych, prześlij przez udostępnianie plików sieciowych, a następnie załaduj do R za pomocą sqldf :: read.csv.sql. Zobacz: http://www.cerebralmastication.com/2009/11/loading-big-data-into-r/ – Hansi

+0

Dzięki za link. Czy masz jakieś doświadczenie, czy pakiet "ROracle" jest lepszy pod względem wydajności? Dla mnie to naprawdę wydaje się sprzeczne z intuicją, aby utworzyć zrzut. – majom

+0

@majom W pracy, muszę pisać zapytania przeciwko hurtowni danych Oracle, a pobieranie danych do R jest bardzo powolne. Nigdy nie udało mi się uruchomić ROraclea. Zamiast sqlFetch staram się pisać ukierunkowane zapytania, aby uzyskać potrzebne dane. Minimalizuje to transfer danych (nieco) i wykorzystuje prędkość Oracle w bazie danych. Nie pracuję z danymi tak dużymi jak twoje, więc mój proces odpowiada moim potrzebom (na razie). Nie idealny, ale działa. – Btibert3

Odpowiedz

0

Możesz spróbować wykonać wywołanie systemowe przez terminal R do powłoki mySQL za pomocą polecenia system(). Przetwarzaj dane na zewnątrz i ładuj tylko to, co potrzebujesz, jako dane wyjściowe.