Snowflake 테이블의 모든 데이터는 자동으로 micro-partition으로 나뉘며, 이는 연속적인(contiguous) 저장 단위입니다.
| 핵심 속성 | 내용 |
|---|---|
| 크기 | 50 MB ~ 500 MB (비압축 기준, uncompressed) |
| 실제 저장 크기 | 항상 압축되어 저장되므로 더 작음 |
| 저장 형식 | Columnar(컬럼 기반) 형식 |
| 물리적 위치 | blob storage에 저장되는 물리 파일 |
| 불변성(Immutable) | Write once, read many — 한 번 쓰면 수정 불가 |
| 자동 생성 | 모든 테이블에 자동 적용 (사용자가 정의/유지 불필요) |
| 파티셔닝 기준 | 데이터가 insert/load되는 자연스러운 순서(natural ordering) 를 따름 |
⭐ 포인트: 크기 50–500MB (uncompressed) 는 단골 출제. 압축 시 더 작아진다는 단서도 함께 기억.
Snowflake는 각 micro-partition의 모든 행에 대한 메타데이터를 저장합니다.
저장되는 메타데이터:
| 컬럼 | MIN | MAX |
|---|---|---|
| order_id | 1 | 3 |
| item_id | 098098SS | TT778GH2 |
| order_date | 01/06/2022 | 01/06/2022 |
⭐ 포인트: 메타데이터의 핵심은 MIN/MAX 값 + distinct count. 이 메타데이터가 pruning의 기반.
micro-partition 메타데이터를 활용해 쿼리를 최적화하는 기법.
작동 원리:
1. 먼저 컬럼의 MIN-MAX 메타데이터를 확인
2. 쿼리에 필요 없는 micro-partition을 쿼리 플랜에서 제외(discard)
3. 메타데이터는 실제 데이터보다 훨씬 작음 → 쿼리 속도 향상
SELECT ORDER_ID, ITEM_ID
FROM MY_CSV_TABLE
WHERE ORDER_ID > 360 AND ORDER_ID < 460;
예시 동작 (각 파티션이 100개 범위를 담을 때):
| Micro-partition | 범위 | 스캔 여부 |
|---|---|---|
| 1 | 001-100 | ❌ 제외 |
| 2 | 101-200 | ❌ 제외 |
| 3 | 201-300 | ❌ 제외 |
| 4 | 301-400 | ✅ 스캔 |
| 5 | 401-500 | ✅ 스캔 |
| 6 | 501-600 | ❌ 제외 |
→ 조건(360~460)에 해당하는 파티션 4, 5만 스캔
⭐ 포인트: "스캔된 micro-partition 비율 : 실제 선택 데이터 비율" 이 가까울수록 pruning 효율이 높다.