2012-11-08 41 views
8

私はOracleデータベースを使用しており、3000万レコードのテーブルをフェッチするのが好きです。sqlFetch()を高速化する

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

この処理には1074.58秒が必要です。したがって、3000万レコードすべてでかなりの時間がかかります。プロセスをスピードアップする可能性はありますか?

私は助けていただきありがとうございます。ありがとう。

+2

Oracleに対するRODBCは狂っています。データベースの最後にあるローカルcsvにダンプし、ネットワークファイル共有を介して転送し、sqldf :: read.csv.sql経由でRにロードします。参照:http://www.cerebralmastication.com/2009/11/loading-big-data-into-r/ – Hansi

+0

リンクをありがとう。あなたは "喜び"のパッケージがパフォーマンスの点で優れているかどうか、経験はありますか?私にとっては、ダンプを作成するのは直感的ではないようです。 – majom

+0

@majom仕事では、Oracleデータウェアハウスに対してクエリを作成し、データをRに引き込む必要があります。私は奇跡を起こして実行することはできませんでした。 sqlFetchの代わりに、私は必要なデータを取得するためのターゲットクエリを書き込もうとします。これにより、データ転送(ビット単位)が最小限に抑えられ、Oracleのデータベース内速度が活用されます。私は自分のものと同じ大きさのデータでは働かないので、私のプロセスは私のニーズに合っています(今のところ)。理想的ではありませんが、機能します。 – Btibert3

答えて

0

system()コマンドを使用して、R端末 からmySQLシェルにシステムコールを試みることができます。データを外部から処理し、必要なものだけを出力として出力します。