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분
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)