대용량 데이터를 관계형 DB나 HDFS 파일로 저장해놓고 필요한 대상만 데이터 전처리, 샘플링해서 R에서 통계분석, 기계학습을 하는 경우가 많이 있습니다. 


이전 포스팅에서 R로 Hive와 PostgreSQL, MySQL 등에 DB connect 해서 사용하는 방법을 소개했었습니다. 


이번 포스팅에서는 


 - R로 Oracle DB connect 하고 데이터 query 하는 방법

 - R로 Presto DB connect 하고 데이터 query 하는 방법


을 소개하겠습니다. 





 1. R로 Oracle DB connect 하고 데이터 query 하는 방법


- rJava, DBI, RJDBC 패키지는 의존성이 있으므로 순서대로 설치하시기 바랍니다. (순서가 바뀌면 에러 발생)

- 혹시 Java 가 설치 안되어 있거나, 버전이 안맞아서 새로 설치해야 하면 이곳 참조 => http://rfriend.tistory.com/232

- Oracle DB의 SQL query문 마지막에 세미콜론(';')을 사용하면 에러가 나므로 유의하세요. 



# R Oracle DB Connect

 

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

 

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

 


# setting driver and connection configuration


drv_Oracle <- JDBC(driverClass="oracle.jdbc.driver.OracleDriver", classPath="C:/download/ojdbc7.jar")

 

con_Oracle <- dbConnect(drv_Oracle, 
                                         "jdbc:oracle:thin:@//12.34.567.89:8888/DB_name",  # ip:port
                                         "id", 
                                         "password")

 

# SQL query
query <- "
       SELECT *
            FROM db.table
            WHERE var1 = 'aaa'
                  AND var2 = 'bbb' " # Do not use ';' (semicolon)

 

# executing DB connect & query
my_data <- dbGetQuery(con_Oracle, query)

 

# DB disconnect
dbDisconnect(con_Oracle)

 

# delete temp objects
rm(drv, con_Oracle, query)

 




 2. R로 Presto DB connect 하고 데이터 query 하는 방법


Presto는 Facebook에서 개발해서 오픈소스로 푼 분산 SQL 쿼리 엔진(distributed SQL query engine for big data)입니다. 메모리 기반으로 실행이 되다 보니 Hive 보다 속도가 많이 빠르기도 하구요, 또 Hive, phoenix, mysql 등 이기종 DB에 접속해서 데이터를 취합하고 가공하는 작업을 할 수 있어서 매우 편리하기도 합니다. 



# R Presto DB Connect


# install and request package

install.packages("RPresto")

library(RPresto)


# setting dbConnect

con_RPresto <- dbConnect(

                                           RPresto::Presto(), 

                                           host='http://12.34.56.789', 

                                           port=8080,

                                           user='user_id',

                                           schema='schema_nm',

                                           catalog='hive', # mysql, phoenix..

                                           session.timezone='UTC' 

                                           )


query <- paste0("

    SELECT var1, var2, count(*) as cnt

        FROM db.table

        WHERE var1 = 'aa'

            AND var2 = 'bb'

        GROUP BY var1, var2

")


# executing query

my_data <- dbGetQuery(con_RPresto, query)


# disconnecting DB

dbDisconnect(conn = con_Postgres)



많은 도움이 되었기를 바랍니다. 

이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^



728x90
반응형
Posted by Rfriend
,