RからRDSへの接続

RからRDSへの接続

RからRedShift(RDS)へアクセスする機会があり、少しハマった点などもあるので、やり方を残して置こうと思います。


前準備

javaのインストール

javaをインストール指定いない場合は、下記のコマンドを実行して、Home brew経由でjavaのインストールを行います。

$ brew cask install java

無事にインスールが完了したら、javaへのPATHを通すために~/.bash_profileに以下を追記します。

export PATH=$PATH:/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home

jdk-10.jdkの部分は、インストールしたバージョンによって変更して下さい。次に追加した設定を反映させるために再読込をします。

source ~/.bash_profile

これでJavaの設定は完了になります。

JDBCドライバーのダウンロード

ここからJDBCのドライバーをダウンロードして、任意の場所に保存して下さい。

パッケージのインストール

RJDBCとrJavaのパッケージをインスールします。

install.packages(c("RJDBC","rJava"))

もしかしたら、他のパッケージ必要かもしれませんが、自分の場合は上記2つで大丈夫でした。

RDSへの接続

JDBCで接続する場合は、以下のようにドライバー接続先RDSを設定して接続を行います。

#JAVAの場所を指定
dyn.load("/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib")

library(RJDBC, quietly = TRUE)

#ドライバーの指定
driver <- JDBC('com.amazon.redshift.jdbc.Driver',
                 'ダウンロードしてきたJDBCドライバーを指定',
                 identifier.quote="`")

#接続先とユーザー名、パスワード。
url <- 'jdbc:RDSの接続先:5439/DB名?&UID=ユーザー名&PWD=パスワード'

#接続
conn <- dbConnect(driver, url)

#テーブルの取得
dbGetTables(conn)

#クエリーを投げる場合
dbGetQuery(conn, "SELECT * FROM hogehoge")

#接続解除
dbDisconnect(conn)

日本語部分やhogehogeなどは適時自身の環境に合わせて修正して下さい。また、自身の環境ではrJavaがそのままでは動かなかったので、dyn.loadで無理やり指定してます(この点、ハマりました…)。SSHなどを指定する場合は、接続先のクエリを変更する必要があります。


dplyrでの接続

dplyrで接続する場合は、以下のように記述します。

library(dplyr)
conn <- src_postgres('DB名',
                      host = 'RDS接続先',
                      port = 5439,
                      user = "ユーザー名", 
                      password = "パスワード")

Data <- tbl(conn, "テーブル名")

colnames(Data)

connで接続設定をした後に、それを使ってテーブルにアクセスします。あとはdplyrのように扱うことが可能です。


まとめ

RでRedshitへアクセスする方法を紹介した。RJDBCの方は、直接クエリがかけるので一時テーブルやマージなどをRDSの方で行えるが、rJavaとの連携部分などはちょっと面倒。dplyrは簡単にRDSのテーブルにアクセスできるが、他のテーブルとのマージなどはクライアント側の処理と思うと、自分のMacBook Airだと少しパワー不足が心配。

Rカテゴリの最新記事