Snowflake는 클라우드 네이티브 데이터 웨어하우스로, 스토리지와 컴퓨팅을 완전 분리한 아키텍처로 유연한 스케일링과 동시성을 제공한다.
Snowflake 아키텍처 레이어
Cloud Services Layer (최적화, 메타데이터, 인증)
↓
Virtual Warehouse Layer (독립적인 MPP 컴퓨팅 클러스터)
↓
Database Storage Layer (자동 압축, 마이크로 파티션)
Snowflake vs Redshift vs BigQuery
| 항목 | Snowflake | Redshift | BigQuery |
|---|
| 멀티 클라우드 | 예 | 아니오 | GCP 전용 |
| 컴퓨팅 분리 | 완전 분리 | 부분 분리 | 완전 분리 |
| 동시성 | 멀티 웨어하우스 | 제한적 | 슬롯 기반 |
| 반정형 데이터 | VARIANT 타입 | SUPER 타입 | JSON 네이티브 |
| 비용 모델 | 크레딧 | 인스턴스 | 쿼리당 |
핵심 기능 예시
sql
-- Time Travel (최대 90일)
SELECT * FROM orders AT (TIMESTAMP => '2024-01-01 00:00:00'::TIMESTAMP);
SELECT * FROM orders BEFORE (STATEMENT => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726');
-- Data Sharing (복사 없이 데이터 공유)
CREATE SHARE my_data_share;
GRANT USAGE ON DATABASE analytics TO SHARE my_data_share;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics.public TO SHARE my_data_share;
-- 반정형 데이터 처리 (VARIANT)
SELECT
v:user_id::INTEGER AS user_id,
v:event_type::STRING AS event_type,
v:properties:page::STRING AS page
FROM raw_events,
LATERAL FLATTEN(input => v:items) AS item;
-- Zero-Copy Clone
CREATE TABLE orders_dev CLONE orders;
가상 웨어하우스 최적화
sql
-- 웨어하우스 자동 일시 정지 (비용 절감)
ALTER WAREHOUSE my_warehouse SET
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE;
-- 멀티 클러스터 웨어하우스 (동시성)
ALTER WAREHOUSE reporting_wh SET
MAX_CLUSTER_COUNT = 5
MIN_CLUSTER_COUNT = 1
SCALING_POLICY = ECONOMY;
Snowpark (코드로 처리)
python
from snowflake.snowpark import Session
session = Session.builder.configs(connection_params).create()
df = session.table("orders") .filter("status = 'completed'") .group_by("customer_id") .agg({"amount": "sum", "order_id": "count"}) .rename("SUM(AMOUNT)", "total_amount")
df.write.save_as_table("customer_summary", mode="overwrite")