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. 터미널 접근

R - Terminal

 

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)

 

+ Recent posts