on-premise와 snowflake 데이터 주고받기

juyun hwang
Snowflake Korea
Published in
4 min readNov 17, 2022

snowflake는 AWS, AZURE와 같은 public cloud 환경에서 동작하는 SaaS 서비스이긴 하지만, 필요에 따라 on premise에 있는 다양한 시스템과 데이터를 교환해야 하는 경우가 빈번하게 발생할 수 있습니다.

그리고 on premise와 public cloud 양쪽을 모두 활용한 hybrid cloud 환경에서 가장 중요한 부분인 데이터의 이동에 대해서 별도의 추가적인 tool 없이 snowflake가 제공하는 snowsql을 통해 데이터가 이동하는 과정을 알아보겠습니다.

1. Snowsql 설치

command base의 SQL tool로써 아래와 같이 다양한 환경을 지원합니다.

https://docs.snowflake.com/en/user-guide/snowsql-install-config.html

2. 설치 후 접속 정보 설정

설치가 끝나면 리눅스(or mac)기준으로 ~/.snowsql에 config 파일이 존재하며,

명령어에서 직접 접속 정보를 입력하거나 config 파일을 통해 접속 정보를 사전에 입력할 수 있습니다.

vi ~/.snowsql/config

이를 활용하여 snowflake 서버 접근 후 SQL을 수행할 수 있습니다.

3. internal stage와 파일 전송

snowflake는 AWS의 S3나 Azure의 ADLS을 직접적으로 활용하지 않고도 파일을 direct로 올릴수 있는 하나의 가상 영역을 제공하며, 이러한 영역을 internal stage라고 부릅니다.

우리는 create stage 명령을 통해 간단하게 가상의 directory를 만들 수 있습니다.

이제 우리는 저렇게 준비된 가상의 directory에 snowsql을 통해 데이터를 전송 시킬 수 있습니다.

put operation

이렇게 유입된 데이터는 web page(snowsight)에서도 확인 가능합니다.

4. 최종 테이블로 적재

internal stage의 데이터를 활용하기 위해서는 일반 테이블로 적재하는 과정이 필요합니다. copy 문을 통해 이와 같은 작업의 수행을 진행합니다.

5. unload to on-premise

이제 반대로 snowflake가 가지고 있는 데이터를 on-premise에 제공하기 위해서 파일을 내려보도록 하겠습니다. 이 경우에도 마찬가지로 snowsql을 사용하여, 이 경우는 sql의 결과를 internal stage를 거치지 않고, 바로 파일로 write 할 수 있습니다.

https://docs.snowflake.com/en/user-guide/snowsql-use.html

snowflake는 위에서 언급한 부분과 같이 기존 on-premise에 있는 다양한 시스템들로부터 데이터를 가져와 이를 활용하고 필요에 따라 여러 시스템에 데이터를 공급 할 수 있어 hybrid cloud 등 다양한 아키텍처에서 활용 할 수 있습니다.

--

--