[DB] R을 활용한 DB I/O

Author : tmlab / Date : 2016. 10. 6. 17:19 / Category : Text Mining/R

Import, Export in DB using RODBC

Import, Export in DB using RODBC

Hyukjun Cho

DB에 접속하고 테이블 확인하기

  • RODBC를 사용해서 csv 파일을 DB에 넣어보겠습니다.
  • 먼저 해당 db에 어떤 테이블이 있는지 확인해보려면 sqlTables()라는 명령어를 쓰면 됩니다.
take<-function (x)
{
  for (i in x) {
    if (!is.element(i, .packages(all.available = TRUE))) {
      install.packages(i)
    }
    library(i, character.only = TRUE)
  }
}

take(c("DBI","RODBC"))
con_maria = odbcConnect("r-test")
sqlTables(con_maria)
##    TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname                android      TABLE        
## 2 testdbname              countries      TABLE

csv을 DB에 Table로 넣기

  • 해당 db에는 contries라는 Table만 존재합니다.
  • 이제 데이터와 함께 테이블을 만들어 넣습니다.
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames = F)
## Error in sqlSave(con_maria, read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv", : table 'android' already exists
sqlTables(con_maria)
##    TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname                android      TABLE        
## 2 testdbname              countries      TABLE
  • 한번 실행하면 DB에 테이블이 생성 된 것을 확인 할 수 있습니다.
  • 하지만 두 번째 실행 할 경우 같은 이름의 Table이 존재 한다고 하는 에러를 볼 수 있습니다.
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames = F)
## Error in sqlSave(con_maria, read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv", : table 'android' already exists

조건문을 써서 테이블 생성하기

  • 방금과 같은 경우를 위해, SQL에서는 다음과 같은 방법을 취합니다.
drop table if exist repair; 
create table repair(...);
  • 이것을 R문법으로 치환해 보겠습니다.
if(is.na(sqlTables(con_maria,tableName = "android")["TABLE_NAME"])==F){
  sqlDrop(con_maria,"android")
  sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames=F)
}else{
  sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames=F)
}
sqlTables(con_maria)
##    TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname                android      TABLE        
## 2 testdbname              countries      TABLE

import from DB

  • 테이블 내용 R로 불러오기
    • 쿼리 문

      SQL["select * from android;]
    • R

android<-sqlFetch(con_maria,"android")
  • 테이블 내용을 csv파일로 만들기
write.csv(sqlFetch(con_maria,"android"),"android_test.csv",row.names = F)

Archives

05-16 11:07

Contact Us

Address
경기도 수원시 영통구 원천동 산5번지 아주대학교 다산관 429호

E-mail
textminings@gmail.com

Phone
031-219-2910

Tags

Calendar

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Copyright © All Rights Reserved
Designed by CMSFactory.NET