Snowflake 사용법(2023년 최신 UI 화면 반영)
in Data Engineering on Snowflake
- Data Warehouse 중 하나인 Snowflake 사용법에 대해 작성한 글입니다
- Snowflake를 전혀 모르는 분들을 대상으로 설명하기 위한 첫 글이고, 큰 그림 위주로 작성했습니다. 추후에 다른 글도 작성할 예정입니다
- 2023년에 기본 웹 인터페이스로 변경된 Snowsight 화면을 기준으로 작성되었습니다
Snowflake
특징
- 스노우플레이크는 데이터 웨어하우스(Data Warehouse)로 Managed 솔루션
- 대표적인 DW로 Google Cloud의 BigQuery, AWS의 Redshift 등이 있음. 이 DW들은 특정 클라우드 벤더사에 종속된 환경에서 사용함. 예를 들어 BigQuery는 Google Cloud, Redshift는 AWS에서만 사용할 수 있음
- 스노우플레이크는 Google Cloud, AWS, Microsoft Azure를 지원해 어떤 곳에 데이터가 저장되어 있어도 활용할 수 있다는 장점이 존재. 특정 플랫폼에 종속되지 않고, 멀티 클라우드 환경를 구축한다면 좋은 대안으로 사용할 수 있음
- 또한 데이터 웨어하우스를 구축할 때 고려해야 하는 점 중 하나는 Transfer Cost인데, 동일 Region이라고 하면 대부분 비용을 부과하지 않음
- 단, 벤더사에서 사용하는 모든 Region을 사용할 수 있는 것은 아님. 23년 5월 기준 Snowflake에서 지원하는 서울 Region은 AWS만 존재
- 즉, AWS 환경(Seoul) + 아직 DW가 없는 상황(또는 Redshift가 아쉬운 상황) + 네트워크 비용 고민을 한다면 Snowflake를 검토해보는 것도 좋을 것
- 400 달러의 크레딧이 포함된 30일 무료 평가판을 제공
- Snowsight에서 쿼리 결과를 시각화 할 수 있음(단, 아직 시각화 기능은 풍부하진 않고 아직 Line, Bar, Scatter, Heatgrid, Scorecard만 존재)
- Streamlit을 인수하고 Snowflake + Streamlit 작업을 하는 것으로 예상
- Zero Copy Cloning
- 원본 데이터의 스냅샷을 만들고, 복제된 데이터를 사용할 수 있음(원본과 독립)
- 프러덕션 환경에 영향을 미치지 않아 Test로 쓸 수 있음
- Clone은 제로 복사고 기본 데이터가 복사되지 않고, 메타데이터 및 포인터만 변경됨
- 다른 데이터 웨어하우스에선 데이터도 저장되어 저장 공간이 2배가 되는데 이 부분은 인상 깊었음
아키텍쳐
이미지 출처 : Snowflake 공식 홈페이지
- Snowflake는 총 3개의 Layer로 구성됨
- 1) Database Storage Layer
- 데이터를 내부적으로 최적화된 압축된 컬럼 형태로 재구성해 저장
- 2) Query Processing Layer
- Virtual Warehouse를 사용해 쿼리를 처리함
- 각각의 Virtual Warehouse는 독립적이며 서로 영향을 주지 않음
- 3) Cloud Service Layer
- 인증, 인프라 관리, 메타데이터 관리, 쿼리 구문 분석 및 최적화, Access Control 등을 관리함
- 1) Database Storage Layer
- 쿼리를 실행하는 사람 관점에선 “Virtual Warehouse라는 것이 있구나” 정도로 이해하고 넘어가도 좋음
비용(Pricing)
- 아키텍쳐에서 나온 3가지 Layer 별로 요금을 부과함
- Database Storage : 압축 후의 데이터 사이즈로 부과
- Virtual Warehouse(Compute) : 데이터 Load, 쿼리 실행히 사용한 컴퓨터 시간만큼 부과
- Cloud Service : 상태 관리, 조정시 부과
- Snowflake는 크레딧이란 개념을 사용하며, 1크레딧 당 2달러, 3달러 등으로 구성
- 크레딧 당 얼마인지는 Snowflake Pricing 페이지에서 확인할 수 있음
- Edition : Standard, Enterprise, Business Critical, Vritual Private Snowflake(VPS) 에디션마다 부과하는 금액이 다름
- 벤더사, Region 마다 부과하는 금액이 다름
- AWS - Seoul Region - Enterprise일 경우 1크레딧 당 $4.05를 부과
AWS - Seoul로 선택할 때의 가격
Virtual Warehouse
- Virtual Warehouse의 성능을 선택할 수 있음
- X-Small, Small, Medium, Large, X-Large, 2X-Large, 3X-Large 등으로 선택할 수 있으며, 타입마다 크레딧이 다르게 부과됨
- Virtual Warehouse가 실행 중이 아닌 경우엔 크레딧을 사용하지 않으며, 1분 미만으로 사용할 경우엔 1분 요금이 청구되며 1분 이후부턴 초당 과금
- 만약 Small을 사용한다면 1시간에 2 크레딧을 소모하고, 초당으로 치환하면 1초에 0.0006 크레딧을 사용함
Virtual Warehouse 성능별 부과되는 크레딧(23년 5월 기준)
- Virtual Warehouse의 타입에 따라 인스턴스의 성능이 얼마나 되는지 궁금했으나, 공식 문서를 찾아도 나오지 않음
- Snowflake warehouse sizing이란 글을 참고하니 X-Small은 1개의 노드, Small은 2개의 노드, Medium은 4개의 노드를 사용한다고 함
- 각 노드엔 8개의 core/threads
- AWS에서 각 노드는 16GB RAM, 200GB SSD인 c5d.2xlarge EC2를 사용한다고 함
- Medium은 4개의 노드를 사용하고, 32 Cores/threads, 64GB RAM, 800GB
Virtual Warehouse 타입별 성능. 출처 : select.dev
- X-Small로 시작하고, 점점 사용 패턴에 따라 성능을 조정해야 할 것으로 보임
- 만약 쿼리가 너무 빨리 실행된다면 리소스를 완전히 활용하지 않을 가능성이 높아서 성능을 낮추는 것도 좋음
- Virtual Warehouse를 2개 만들고, 사용자 그룹별로 분리할 수도 있음
- 쿼리를 많이 사용하는 데이터 분석가에겐 더 큰 Virtual Warehouse를 사용하도록 권한을 부여
- 가끔 사용하는 사람에겐 작은 Virtual Warehouse를 제공
- Enterprise 에디션 이상을 사용하면 Multi-cluster Warehouse을 사용할 수 있음. Auto-scale 기능을 활성화 할 수 있음. 단, 많이 쓰는 만큼 비용이 더 나감(당연한 이야기)
Snowflake 시작하기
가입하기
- Snowflake 홈페이지 우측에 있는 START FOR FREE(무료로 시작하기) 버튼을 클릭
- 그 후, 개인 정보를 입력한 후 다음으로 이동
- Enterprise가 제일 많이 사용하는 옵션인 것 같아 Enterprise로 선택했으며, 클라우드 벤더사와 지역을 설정
- 그 후, 로그인하고 인증을 하면 Snowsight 화면으로 이동함
Snowsight : 웹 콘솔
- Snowsight는 쿼리 작성, 실행, 히스토리 확인, 각종 설정, 데이터 공유 등을 할 수 있는 공간
- Web Console이라고 생각하면 됨
- 과거에 사용되던 Classic Console은 점점 사용하지 않을 예정이라고 함
Snowflake Snowsight Worksheet
- User Menu, Navigation Menu, Contents 영역으로 구성됨
- Contents 영역은 Navigation Menu에서 선택하는 것에 따라 화면이 바뀜
- User Menu
- Role 변경, User Profile 설정(언어, 사진, 이름, 비밀번호 등)
- Navigation
- Worksheet : 작업 공간. SQL, Python Worksheet를 만들 수 있으며 폴더를 만들어 정리할 수도 있음
- Dashboards : 1개 또는 여러 차트를 배치할 수 있는 공간
- Data : 데이터 관련 공간
- Marketplace : 다양한 마켓플레이스가 제공하는 것들이 존재. 데이터, SaaS 등
- Activity : Query History, Copy Histroy, Task History
- Admin : 사용량 확인, Virtual Warehouse 리스트 확인, Resource Monitor, User & Role 설정, 보안, Billing 등
- 데이터를 활용하는 사람이 제일 많이 사용할 부분은 Worksheets, Data
- 데이터 엔지니어, DevOps 엔지니어는 Activity, Admin
Worksheet : 쿼리 실행하는 공간
Worksheet 화면
- SQL 쿼리를 실행할 수 있는 공간(DDL, DML)
- 쿼리나 오퍼레이션의 결과를 확인할 수 있음
- Recent, Shared with me, My Worksheets, Folders는 모두 클릭해보면 직관적으로 이해됨. Folder를 생성해서 관리하는 것을 추천
- 저는 Dev 폴더를 생성함
- 우측의 … 버튼을 클릭하면 Manage Filter를 확인할 수 있음
- 이 부분은 추후에 쿼리에서 사용할 필터를 저장함
Worksheet의 Filter
- 우측의 + 버튼을 클릭하면 SQL Worksheet, Python Worksheet, Folder를 생성할 수 있음
- SQL Worksheet를 클릭하면 다음과 같은 화면이 보이며, 앞으로 데이터 분석할 때 많이 활용할 공간
- 우측에 select col from table whre created = :daterange가 작성된 부분이 쿼리 작성 공간
- 좌측엔 Worksheets가 폴더 구분되어 보임
- 좌측 상단의 Worksheets 왼쪽에 Home 아이콘을 누르면 Snowsight 메인 화면으로 이동함
SQL Worksheets
- Databases를 클릭하면 Snowsight 메인에서 Data - Database를 누르면 다음과같이 보임
- 어떤 데이터가 존재하는지 확인할 수 있으며, 저는 CITIBIKE, WEATHER 데이터베이스를 생성해서 존재함
- 데이터베이스 - 스키마 - 테이블이 보이며, 어떤 컬럼을 가지는지도 보임
SQL Worksheets의 Databases 클릭시
- Warehouse 선택 : 우측의 ACCOUNTADMIN, COMPUTE_WH를 누르면 각종 설정을 변경할 수 있음. 여러 Role을 보유하거나 Warehouse도 Role마다 다르게 쓴다면 다른 것이 보일 것. 항상 이 부분이 잘 설정되어 있나 확인해야 함
SQL Worksheets의 Role, Warehouse 설정
- 데이터베이스 선택 : SNOWFLAKE_SAMPLE_DATA를 클릭하면 어떤 Database에서 사용할 것인지 선택할 수 있음. 최초에 데이터베이스 선택을 꼭 해야 함
SQL Worksheets의 Database 설정
- 2023-05-28 6:09pm 처럼 Worksheet에 마우스를 올린 후 …을 클릭하면 이름 변경, 쿼리 포매팅, 삭제, 단축키 확인 등을 할 수 있음
SQL Worksheets의 Worksheet 설정
SQL 쿼리 실행
- 다음과 같은 쿼리 실행
SELECT
O_ORDERDATE as date,
COUNT(O_ORDERDATE) as orders
FROM
SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
GROUP BY
O_ORDERDATE
ORDER BY
O_ORDERDATE
LIMIT 10;
SQL 쿼리 결과
- Chart를 눌러보면 시각화를 할 수 있음
쿼리 결과의 Chart
Python Worksheet
- Python Worksheet를 실행하면 Python 스크립트를 실행할 수 있는 공간이 나옴
- Snowpark 라이브러리를 사용함
- Snowpark는 Snowflake를 프로그래밍 언어로 사용하기 위한 라이브러리
Python Worksheet 형태
Data : 데이터 Load & 확인
- Data 아래에 Databases 탭이 존재함
- 이 공간에서 데이터를 load 할 수도 있고, 저장된 데이터를 확인할 수도 있음
- Data 아래에 있는 Private Sharing에서 데이터를 공유할 수 있음
- Snowflake는 Database - Schema - Table 형태로 저장됨
- 여기서 Schema는 보통 RDB에서 말하는 컬럼이 아니기에 헷갈리지 않는 것이 필요
- Database
- Schema들의 논리적 그룹
- Schema
- Database Object(Tables, View 등)의 논리적 그룹. 하나의 데이터베이스 아래에 존재함
- 그 외에 Object는 우선 아래 정도만 있구나 인지하고, 필요할 때 하나씩 학습하는 것을 추천
Snowflake의 여러 Objects. 이미지 출처 : Analytics Today
총평
- 익숙해지는데 시간이 소요되었지만, 한번 익히니 어떤 느낌인지 깨달음
- 다른 데이터웨어하우스 대비 쿼리문으로 진행하는 것이 많아 처음에 진입 장벽이 존재할 것(예 : USE Database 등)
- Snowflake의 UI가 변경되어 최신 내용에 맞는 글이 거의 없어 글을 작성하게 되었음. 앞으로도 계속 변경될 것 같음
- 자료가 있는듯 없는듯.. 조금 더 공식 문서가 친절해지면 좋을 것 같음
핵심 내용 정리
- Snowflake는 클라우드 3사의 환경에서 구축할 수 있음
- 3개의 Layer : Database Storage, Query Processing, Cloud Service
- 비용 : 크레딧 부과(클라우드 벤더사, Region 마다 금액이 다름)
- Virtual Warehouse : 데이터 Load, 쿼리 연산을 할 때 사용하는 인스턴스
- Snowsight : Snowflake의 웹 콘솔
- Worksheet : 작업 공간
- Data : 데이터 Load, 데이터 확인할 수 있는 공간
- 그 외에 다양한 Object 존재
참고 자료
추가로 작성할 글
- Snowflake SQL 문법 정리
- 쿼리 퍼포먼스 최적화하기
- Snowflake Python에서 사용하기(Snowpark API)
- Snowflake로 ELT 데이터 파이프라인 만들기
- Snowflake로 마트 만들기(Task)
- Snowflake 비용 모니터링하기
- 쿼리 작성 가이드
글 작성하는데 걸린 시간 : 4시간 52분
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.