R Studio에서, snowflake에 연결하여 Data를 접근할 수 있는 방법을 정리한다.
0. 조건
-sandbox에서 rstudio를 생성하여 접속한 상태
-snowflake에 데이터를 올린 후, 접속 계정을 받은 상태
-외부망이 오픈되어, wget으로 파일 다운로드가 가능해야 함
-다음의 정보가 있어야 함
- snowflake Account URL (ex: https://atixoaj-my-account-url.snowflakecomputing.com
- snowflake ID
- snowflake PW
1. 터미널 접근
2. root 계정으로 전환
$ sudo su
(암호 입력)
3. linux용 ODBC 다운로드 (tgz)
$ cd /home/rstudio
$ sudo wget <https://sfc-repo.snowflakecomputing.com/odbc/linux/2.25.4/snowflake_linux_x8664_odbc-2.25.4.tgz>
4. odbc 설치
$ gunzip snowflake_linux_x8664_odbc-2.25.4.tgz
$ tar -xvf snowflake_linux_x8664_odbc-2.25.4.tar
$ cd snowflake_odbc
$ ./unixodbc_setup.sh
5. odbc.ini 파일 수정
-파일 경로: /home/rstudio/snowflake_odbc/conf/odbc.ini
(1)원본
# To use this INI file, replace [INSTALLDIR] with the
# directory the tarball was extracted to.
[ODBC Data Sources]
SnowflakeDSII=SnowflakeDSIIDriver
[SnowflakeDSII]
Description=Snowflake DSII
Driver=/path/to/your/libSnowflake.so
Locale=en-US
# [ODBC]
# Trace=1
# TraceFile=/tmp/regress/ODBCTrace-$U-$P-$T.log
(2)변경
# To use this INI file, replace [INSTALLDIR] with the
# directory the tarball was extracted to.
[ODBC Data Sources]
SnowflakeDSII=SnowflakeDSIIDriver
[SnowflakeDSII]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=atixoaj-my-account-url.snowflakecomputing.com ###{snowflake account url 입력}
PORT=443
SSL=on
ACCOUNT=my-account ###{snowflake account 입력}
# [ODBC]
# Trace=1
# TraceFile=/tmp/regress/ODBCTrace-$U-$P-$T.log
6. Console 접근
7. 연결
install.packages(c("DBI", "dplyr","dbplyr","odbc"))
library(DBI)
library(dplyr)
library(dbplyr)
library(odbc)
myconn <- DBI::dbConnect(odbc::odbc(), Driver = "SnowflakeDSIIDriver", UID = "{my id}", PWD = "{my password}", Server = "{my account url}")
8. 연결 확인
9. 쿼리 테스트
//conn 정보 입력
myconn <- DBI::dbConnect(odbc::odbc(), Driver = "SnowflakeDSIIDriver", UID = "{my username}", PWD = "{my password}", Server = "atixoaj-{my-account-url}.snowflakecomputing.com")
//snowflake warehouse 정보 입력
DBI::dbGetQuery(myconn,"use warehouse mywarehousename")
//queyr 수행하여 결과를 mydata 변수에 담기 (mydata <- 생략할 경우, 결과가 바로 출력됨)
mydata <- DBI::dbGetQuery(myconn,"select * from mydb.myschema.mytable limit 10")
//mydata 변수 출력
head(mydata)