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")