//尾野
[[Rとインターフェースのあるアプリ]]

*RODBC [#m2ee4573]

//岡田追記
いろいろな種類のデータベースに対して、アプリケーションからは共通したプロトコルでアクセスできるようにするための規格としてODBCがあります。RODBCではRからODBCを使うことで、各種のデータベース上に格納されたテーブルをデータフレームに読み込む、データフレームをデータベースに格納するなどのことができます。

**使用方法 [#sdf53b5f]

 library(rodbc)


** Windows以外の環境でのメモ [#i626f5f4]

ODBCというとWindowsだけのもののように思えますが、データベースを抽象化して交換が可能にすること自体はどのOSでも有用なアプローチなので、LinuxやMacOS Xなどのunix系OSでも利用されることがあります。MacOS X では標準で[[iODBC:http://www.iodbc.org/]]というODBCドライバマネージャがインストールされるので、あとはiODBC用の各種データベース向けドライバをインストールすれば、RODBCが利用可能となります。

*MacOSX10.4.8現在:ODBCアドミニストレータという名称になっており、マネージャのインストールは不要。(しかし、ODBC Driver は何にも入っていませんので、ネットから見つけてくるしかありません)

//2011.1.4横山追記
MacOSX10.6(Snow Leopard) ではODBCアドミニストレータが標準で用意されていないようなので、[[Appleのサポートページ:http://support.apple.com/downloads/ODBC_Administrator_Tool_for_Mac_OS_X]]からダウンロードしてくる必要があります。
MacOSX10.6(Snow Leopard) ではODBCアドミニストレータが標準で用意されていないため、[[Appleのサポートページ:http://support.apple.com/downloads/ODBC_Administrator_Tool_for_Mac_OS_X]]からダウンロードしてくる必要があります。

** Windows + MySQL(5.0) + RODBC + MyODBC(3.51) のチューンアップ [#n6e0aed5]

デフォルトでは遅いのでチューンアップをしましょう。
GUIのMySQL Administratorで設定してもよいし、MySqlのディレクトリにあるmy.iniを直接変更しても大丈夫。

GUIの場合:"Startup Variables"を開いて、

1. InnoDB ParametersのFlush Log at: で、選択肢が3つありますが真ん中以外に変更します。下のほうがちょっと早いようです。正直、これが一番パフォーマンスに影響すると思います(thanks to なかまさん)。

2. General ParametersのKey Bufferをでっかくします(適当に)。少し早くなりました。

3. Advanced NetworkingのMax Packet Sizeをでっかくします。少し早くなりました。

4. AdvancedのJoin file sizeをでっかくします。ほんの少し早くなりました。

ローカルでのみつかう場合(TCP/IPではなく名前付きパイプの利用)

5. General ParametersのEnable Named Pipeのチェックをオンにします。

名前付きパイプを使う場合、MyODBCの"Server"は"."にします(ピリオドひとつ)。
MyODBC 5.0では名前付きパイプがなぜか上手くいきませんでした。

 ## 以下のデータで
 > dim(d)
 [1] 8640   22
 channel <- odbcConnect("R3", uid="R", case="tolower")
 #sqlQuery(channel,"USE rdata")
 sqlSave(channel, d)
 sqlDrop(channel, "d")
 close(channel)
 }
 print(r<-system.time(f()))
 ## これを実行しました。
 
 
 ## デフォルト
 [1]   2.66   0.70 375.40     NA     NA
 
 ## 1-4まで変更
 [1] 1.18 0.15 3.91   NA   NA
 
 ## 1-4+5,6でNamed Pipeを使用
 [1] 1.08 0.05 2.95   NA   NA

大げさにではなく、100倍速くなりました。掲示板で文句言ってほんとにごめんなさい。
また、かかる時間は試行によって結構ばらつきます。平均すると、名前付きパイプを使ったほうが速いと思います。

チューンアップの方法はこれで全部ではないと思うので、気が付いたら書き加えていってください。

ちなみに

 > print(system.time(write.table(d,"tmp.tsv")))
 [1] 1.97 0.02 2.05   NA   NA

でした。

** Mac or Linux + RODBC + EXCEL [#k5dd7b55]
- Mac 版 R や Linux 版 R で、RODBC を介して EXCEL ファイルを読み込むにはどうすればよいのでしょう?例えば MAC では odbcConnect() を使っても読み込むことができません。。。 --  &new{2007-02-11 (日) 02:54:37};
- ↓は読みました?~
[[http://cran.r-project.org/doc/manuals/R-data.html#RODBC:http://cran.r-project.org/doc/manuals/R-data.html#RODBC]] --  &new{2007-02-11 (日) 10:38:38};
- 答え、「できない」 -- [[okinawa]] &new{2007-02-11 (日) 12:06:00};
- 「できない」 ⇒ あらら・・・。やっぱり出来ないですか。。。諦めます。ご解答どうもありがとうございました。 --  &new{2007-02-13 (火) 10:14:33};
- 何故「できない」かというと、Mac,LinuxのExcel ODBC Driverを見つけられなかったから。Mac,LinuxでもMySQLなどの「本来のRDB」ならば「2バイトコード問題」があるにせよODBC Driverがあるので、RODBCでつなぐことはできる。ちなみにAccess.mdbはサードパーティ製のMac版有料AccessODBCDriverを使えば(2バイトコード部分は化けるが)インポートすることは可能だった。Excel->CSV->R(read.table)を一発でやりたいのなら、MacならAppleScriptを書けばバッチでできるのでは? -- [[okinawa]] &new{2007-02-13 (火) 11:10:06};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS