본문 바로가기

R

R DB Connection

R에서 일반적인 분석 방법은 아래와 같다.

1. DB에서 분석할 데이터를 가져와 csv, txt와 같은 파일 형태로 생성한다.

2. R에서는 각종 read 함수를 이용하여 생성한 파일을 메모리에 올려 분석 작업을 진행한다.


이 방법의 단점은 R에서 분석하기 위해서는 DB에서 데이터를 가공해서 파일로 전달할때 까지 기다려야 한다는 것이다.

분석가와 DBA간의 커뮤니케이션에 문제가 있을 경우 위 1,2번의 작업을 몇 차례나 더 해야 할 수도 있다.


그래서 이번에는 R에서 직접 RDBMS를 Conncetion하는 방법을 알아보고자 한다.

이 방법의 장점은 SQL을 조금만 알면 분석가는 DBA에게 데이터를 요청할 필요도 없으며 SQL로 쉽게 데이터를 선 정제 후 R에서 분석가능하다.


여기서 부터 아래 작업은 Ubuntu 64bit 기준으로 작성되었으며 R이 이미 설치되어 있다고 가정한다.

R Version은 >= 2.15 이상이어야 한다.


RJDBC 패키지를 사용하기 위해서는 우선 java를 설치해야 한다.

 $ sudo apt-get install openjdk-7-jdk


그리고 아래와 같이 실행하기 바란다.(Root 계정으로 실행)

 $ R CMD javareconf


이제 R에서 DB Connection하기 위한 Package를 설치해야 한다.

install.packages(rJava)
install.packages(DBI)
install.packages(RJDBC)

환경변수 세팅

 LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/:/home/user/R/x86_64-pc-linux-gnu-library/3.0/rJava/jri:$LD_LIBRARY_PATH


설치 후 해당 Package가 제대로 load되는지 확인이 필요하다.

library(DBI)
library(rJava)
library(RJDBC)

RJDBC는 rJava에 의존적으로 rJava를 먼저 load 후 loading해야 한다.

혹 rJava load 시 아래와 같은 에러가 발생할 경우 이 링크를 참조하기 바란다.

(만약 이도저도 다 해봤는데 안되면 재부팅 해보길 바란다... ^^;)

 Error in dyn.load(x, as.logical(local), as.logical(now)) : 
      unable to load shared library '/usr/local/lib/R/site-library/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory

여기서는 mysql를 접속하기 위해서 mysql connector를 설치해야 한다.(oracle이라면 이글 참고)

 $ sudo apt-get install libmysql-java

설치를 하게 되면 /usr/share/java/ 폴더에 jar파일이 있을 것이다.


이제 다 끝났다. 이제 직접 R에서 DB Connection을 해보자.

library(DBI)
library(rJava)
library(RJDBC)
drv <- JDBC("com.mysql.jdbc.Driver", "/usr/share/java/mysql-connector-java.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://<db_ip>:<db_port>/<dbname>", "<id>", "<passwd>")
df.table <- dbGetQuery(conn, "select * from DBTABLE")
class(df.table)

실제 소스 실행화면


위 실행화면을 보면 dbGetQuery로 SQL문을 작성하여 해당 테이블을 가져와 df.table R 객체에 할당하였고 테이블 데이터를 확인할 수 있다. 또한 class 함수로 df.table형을 확인해보면 data.frame을 알 수 있다. ^^

'R' 카테고리의 다른 글

R 상위버전 설치  (1) 2014.01.28
R 상관분석(Correlation) 시각화  (2) 2014.01.24
R 데이터프레임(DF) grep & gsub  (0) 2014.01.17