12 min to read
R-Studio OJDBC 연동하기(벌크 로딩)
R-Studio 데이터베이스를 제어하기 위한 OJDBC연동
사용된 함수
사용 예시 소스코드
# 데이터베이스 실습(정형)
#
# 파일 이름 : 09_03.데이터베이스 실습(정형).R
#
# 첨부 이미지 : goods_info.png
#
# 1. sql-developer을 이용하여 그림과 같은 테이블을 생성하세요.
# create table goods(
# pcode char(10) primary key,
# pname varchar2(50) not null,
# price number(10) not null,
# maker varchar2(25) not null
# );
driver <- "oracle.jdbc.driver.OracleDriver"
jarPath <- "C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\jdbc\\lib\\ojdbc6.jar"
drv <- JDBC(driverClass = driver, classPath = jarPath)
chKType(drv)
# # 접속 객체 구하기
url <- "jdbc:oracle:thin:@127.0.0.1:1521/xe"
id <- "root"
password <- "root"
conn <- dbConnect(drv, url, id, password)
# 2. R에서 SQL문을 이용하여 데이터를 추가하시오.
# insert문
query <- "INSERT INTO goods"
query <- paste(query, " VALUES('1005', 'RTX2080', '510000', 'Nvidia')")
result <- dbSendUpdate(conn, query)
query <- "SELECT * FROM goods"
result <- dbGetQuery(conn, query)
result <- result %>% arrange(PCODE) # 정렬
result
# PCODE PNAME PRICE MAKER
# 1 1001 냉장고 2000000 SM
# 2 1002 세탁기 700000 YG
# 3 1003 HDTV 2500000 GM
# 3. R에서 SQL문을 이용하여 데이터를 조회하시오.
query <- "SELECT * FROM goods"
result <- dbGetQuery(conn, query)
result <- result %>% arrange(PCODE) # 정렬
result
# 4. R에서 막대 그래프와 Pie 그래프를 그리시오.
barplot(main = "물품 가격", height = result$PRICE, names.arg = result$PNAME, col = rainbow(nrow(result)), ylim = c(0, max(result$PRICE)))
legend(x = "topright", legend = result$PNAME, fill = rainbow(nrow(result)), bty = 'o')
library(plotrix)
pie3d <- pie3D(main = "제품 가격", x = result$PRICE, radius = 2)
pie3D.labels(pie3d, labels = result$PNAME, height = 0, labelcex = 1.2, labelrad = 2.5)
#########################################################################33
# 벌크 로딩( csv --> table )
# 벌크(bulk)란 many, large등의 의미를 담고 있는 단어로써, 많은 량의 데이터를 의미한다.
driver <- "oracle.jdbc.driver.OracleDriver"
jarPath <- "C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\jdbc\\lib\\ojdbc6.jar"
drv <- JDBC(driverClass = driver, classPath = jarPath)
# chKType(drv)
# # 접속 객체 구하기
url <- "jdbc:oracle:thin:@127.0.0.1:1521/xe"
id <- "root"
password <- "root"
conn <- dbConnect(drv, url, id, password)
# 데이터 조회
query <- "SELECT * FROM COUNTRY_SUMMARY"
result <- dbGetQuery(conn, query)
str(result)
# COUNTRY_SUMMARY : 히스토램 그려보기
x <- result$COUNTRY_TXT
val <- result$CNT
hist(val, breaks = 100, ylim = c(0, max(val)/130), col = rainbow(length(x)))
################################################################################################
# COUNTRY_SUMMARY : 테러 건수가 1000이상 2500이하의 데이터를 이용하여 막대 그래프
# 데이터 조회
query <- "SELECT * FROM COUNTRY_SUMMARY"
result <- dbGetQuery(conn, query)
result <- result %>% filter(CNT>=1000 & CNT<=2500)
str(result)
x <- result$COUNTRY_TXT
val <- result$CNT
barplot(main = "나라별 테러 건수", height = val, col = rainbow(length(val)), names.arg = x, ylim = c(0, max(val)+500), axes = F)
axis(side=2, at=seq(0, max(val)+200, 100), las=1)
legend(x = "top", legend = x, fill = rainbow(length(val)), bty = 'o', horiz = T, cex = 0.8)
# SUMMARY_TOP_10 : 상위 10개국의 테러 현황을 막대그래프
query <- "SELECT * FROM COUNTRY_SUMMARY_TOP_10"
result <- dbGetQuery(conn, query)
str(result)
x <- result$COUNTRY_TXT
val <- result$CNT
barplot(main = "Top 10 테러 건수", height = val, col = rainbow(length(val)), names.arg = x, ylim = c(0, max(val)+500), axes = F, cex.names = 0.8)
axis(side=2, at=seq(0, max(val)+1000, 500), las=1)
legend(x = "topright", legend = x, fill = rainbow(length(val)), bty = 'o', horiz = F, cex = 0.7)
# THREE_COUNTRY : 막대그래프
query <- "SELECT * FROM THREE_CONUNTY"
result <- dbGetQuery(conn, query)
result <- dcast(result, COUNTRY_TXT ~ IYEAR, value.var = "CNT")
x <- result$COUNTRY_TXT
val <- result[-1]
leX <- colnames(result[-1])
barplot(main = "나라별 3년동안 테러 건수", height = t(as.matrix(val)), col = rainbow(length(val)), ylim = c(0, max(val)+500), axes = F, cex.names = 0.8, beside = T, names.arg = x)
axis(side=2, at=seq(0, max(val)+1000, 500), las=1)
legend(x = "topright", legend = leX, fill = rainbow(length(leX)), bty = 'o', horiz = T, cex = 0.9)
########################### 벌크로딩 하기.
-- # 벌크 로딩( csv --> table )
-- # 벌크(bulk)란 many, large등의 의미를 담고 있는 단어로써, 많은 량의 데이터를 의미한다.
-- # 엑셀 형식(csv)의 파일을 데이터 베이스에 추가하는 예시이다.
-- # sqlldr이라는 오라클 유틸리티를 이용하도록 한다.
-- # 테이블 생성시 컨트롤 파일
-- # 숫자 number integer external
-- # 날짜 date date
-- # 테이블 생성 문장
-- # sql developer 툴을 사용하여 다음과 같이 테이블을 생성하도록 한다.
drop table mytable ;
create table mytable(
name varchar2(50),
age number,
regdate date
);
-- # 컨트롤 파일 만들기
-- # 메모장을 이용하여 다음 파일을 작성하도록 한다.
-- # 파일 이름 : mycontrol.ctl
-- # 데이터 타입에 상관 없이 모두 char 형으로 처리하면 된다.
load data
infile 'mycsv.csv'
insert into table mytable
fields terminated by ','
trailing nullcols(
name, age, regdate
)
-- # csv 파일 내용
-- # 메모장을 이용하여 다음과 같이 엑셀 파일을 작성하도록 한다.
-- # 만일 한글이 깨지는 경우에는 인코딩 방식은 ansi로 설정해 보도록 한다.
-- # 파일 이름 : mycsv.csv
name,age,regdate
김철수,30,2018/05/08
박영희,40,2018/12/25
홍길동,50,2018/01/01
-- # 커맨드 창
-- # cmd를 이용하여 커맨드 창으로 이동한다.
-- # 위에서 작성한 파일들이 모두 c:\temp 폴더에 있다고 가정한다.
-- # 오라클 설치 버전이 10g 또는 11g 버전이다.
cd c:\temp
C:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlldr.exe userid=gomdori/oracle control=mycontrol.ctl
-- # R 실습
-- # 위에서 만든 테이블을 R을 이용하여 읽어 들이는 코드를 작성하시오.
-- # 파일 이름 : get_mytable.R
#######################################################################
-- # 추가 실습
-- # sqlldr 유틸리티와 첨부된 파일(myterror.csv)을 이용하여 bulk loading을 수행해 보세요.
-- # 단, 컨트롤 파일과 myterror table은 직접 생성하도록 한다.
-- # myterror 테이블을 생성하되, 다음 컬럼들은 모두 숫자 형식으로 만든다.
-- # eventid / iyear / imonth / iday / country / region / latitude / longitude
-- # 컨트롤 파일에서는 myterror 테이블의 컬럼 이름만 동일하게 지정하고,
-- # 데이터 타입은 명시하지 않도록 한다.
-- # R 실습
-- # 위에서 만든 테이블을 R을 이용하여 읽어 들이는 코드를 작성하시오.
-- # 파일 이름 : get_myterror.R
Comments