RからDBに接続する方法をまとめました。今回はRDBを対象にしていますが、NoSQLに接続する用のパッケージもあります。
DBIパッケージ
まずはDBに接続するために共通して必要になるDBIパッケージをインストールします。DBIパッケージは、異なるデータベース間で共通のインターフェースを提供しています。
> install.packages("DBI")
PostgreSQL
RPostgreSQLパッケージをインストールします。
> install.packages("RPostgreSQL")
CentOSで以下のようなエラーが出てパッケージのインストールに失敗した場合はpostgresql-develをインストールしてください。
make: *** [RS-PQescape.o] Error 1 ERROR: compilation failed for package ‘RPostgreSQL’ * removing ‘/home/ruser/R/x86_64-redhat-linux-gnu-library/3.2/RPostgreSQL’ Warning in install.packages : installation of package ‘RPostgreSQL’ had non-zero exit status ... $ sudo yum install postgresql-devel
DBIパッケージはRPostgreSQLパッケージによって一緒に読み込まれるので明示的に読み込まなくてもいいです。RPostgreSQLを使用すれば AWS の Redshift に接続することも可能です。
> require("DBI") # 必須ではない > require("RPostgreSQL") > con <- dbConnect(PostgreSQL(), host="hostname", port=port, dbname="dev", user="user", password="password") > dataset <- dbGetQuery(con,"SELECT * FROM users") > print(dataset)
dbConnect()の第1引数はDBのドライバを指定しますが、PostgreSQL()はRPostgreSQLパッケージの関数で、ドライバを返すものです。代わりにdbDriver("PostgreSQL")としてもRPostgreSQLパッケージがインストールされていれば探してドライバを返してくれます。
> class(dataset) [1] "data.frame"
dbConnect()とdbGetQuery()はDBIパッケージの関数ですが、その他にも以下の関数があります。library(help="DBI")で表示された関数のみまとめました。dbGetQuery()はdbSendQuery()とdbFetch()、dbClearResult()などをまとめたような関数です。
| 関数 | 機能 |
|---|---|
| dbDisconnect(con) | DBの接続を切断 |
| dbDriver(drvName) | DBのドライバーを返す |
| dbExistsTable(con, name) | 接続DBからテーブルの存在確認 |
| dbGetException(con) | 接続DBのエラーコード、メッセージを取得 |
| dbGetInfo(con | res) | 接続DBの情報 / DBIResultの情報 |
| dbDataType(con, obj) | DataTypeを表示 |
| dbIsValid(con) | 接続の有効を確認 |
| dbListConnections(driver) | 対象ドライバーの接続情報を取得 |
| dbListTables(con) | 接続DBのテーブル一覧 |
| dbReadTable(con, name) | テーブルを読み込む(データフレームが返される) |
| dbWriteTable(con, name, value..) | テーブルに書き込む |
| dbSendQuery(con, sql) | SQLを実行して結果をDBIResultで受け取る |
| dbFetch(res) or fetch(res) | DBIResultから結果を取得 |
| dbHasCompleted | dbGetInfo(res)のCompleted |
| dbGetStatement | dbGetInfo(res)のStatement |
| dbGetRowCount | dbGetInfo(res)のrowCount |
| dbGetRowsAffected | dbGetInfo(res)のrowsAffected |
| dbClearResult | DBIResultの結果をクリア |
| dbColumnInfo | DBIResultからカラム情報を取得 |
| dbRemoveTable(con, name) | テーブル削除 |
| dbListFields(con, name) | テーブルのフィールド情報を取得 |
| dbListResults(con) | 残ってる結果を表示 |
使用方法の参考: MySQL and R | R-bloggers
MySQL
RMySQLのパッケージをインストールします。
> install.packages("RMySQL") > require("RMySQL") > con <- dbConnect(MySQL(), host="hostname", port=port, dbname="dev", user="user", password="password") > dataset <- dbGetQuery(con,"SELECT * FROM users") > print(dataset)
SQLite
RSQLiteのパッケージをインストールします。
> install.packages("RSQLite") > require("RSQLite") > con <- dbConnect(MySQL(), host="hostname", port=port, dbname="dev", user="user", password="password") > dataset <- dbGetQuery(con,"SELECT * FROM users") > print(dataset)
RODBC
上記の他にODBCを利用して接続したい場合はRODBCパッケージをインストールします。DBIパッケージを使用する方が簡単なので、対応していないRDBでない限りDBIパッケージを使用しましょう。RODBCの説明はここでは省きます。
> install.packages("RODBC")