[Snowflake] Micro-partitions⭐⭐

차지예·2026년 6월 12일

Snowflake

목록 보기
44/49
post-thumbnail

1. Micro-partitions란?

Snowflake 테이블의 모든 데이터는 자동으로 micro-partition으로 나뉘며, 이는 연속적인(contiguous) 저장 단위입니다.

핵심 속성내용
크기50 MB ~ 500 MB (비압축 기준, uncompressed)
실제 저장 크기항상 압축되어 저장되므로 더 작음
저장 형식Columnar(컬럼 기반) 형식
물리적 위치blob storage에 저장되는 물리 파일
불변성(Immutable)Write once, read many — 한 번 쓰면 수정 불가
자동 생성모든 테이블에 자동 적용 (사용자가 정의/유지 불필요)
파티셔닝 기준데이터가 insert/load되는 자연스러운 순서(natural ordering) 를 따름

포인트: 크기 50–500MB (uncompressed) 는 단골 출제. 압축 시 더 작아진다는 단서도 함께 기억.

데이터 재구성

  • micro-partition은 Snowflake columnar data format으로 재구성(reorganisation) 과정을 거침
  • 컬럼별로 독립 저장 + 독립 압축 → Snowflake가 컬럼별 최적 압축 알고리즘을 자동 선택

2. Micro-partitioning의 이점 (Benefits)

  • 전통적 static partitioning과 달리 자동 도출 → 사전 정의/유지보수 불필요
  • 작은 크기 → 효율적인 DML + 세밀한 pruning(가지치기)
  • micro-partition은 값의 범위가 서로 겹칠(overlap) 수 있음 → 작고 균일한 크기와 결합해 skew(데이터 편향) 방지
  • Columnar storage → 쿼리가 참조하는 컬럼만 스캔
  • 컬럼별 개별 압축 → 최적 압축 알고리즘 자동 적용

3. Micro-partition Metadata

Snowflake는 각 micro-partition의 모든 행에 대한 메타데이터를 저장합니다.

저장되는 메타데이터:

  • 각 컬럼 값의 범위(MIN / MAX)
  • distinct 값의 개수 (number of distinct values)
  • 최적화 및 효율적 쿼리 처리를 위한 추가 속성

예시 (슬라이드 기준)

컬럼MINMAX
order_id13
item_id098098SSTT778GH2
order_date01/06/202201/06/2022

포인트: 메타데이터의 핵심은 MIN/MAX 값 + distinct count. 이 메타데이터가 pruning의 기반.


4. Micro-partition 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범위스캔 여부
1001-100❌ 제외
2101-200❌ 제외
3201-300❌ 제외
4301-400스캔
5401-500스캔
6501-600❌ 제외

→ 조건(360~460)에 해당하는 파티션 4, 5만 스캔

Pruning 추가 사실 (공식 문서)

  • 컬럼 단위 pruning까지 가능 → 파티션 제외 후, 남은 파티션 내에서 컬럼별로도 pruning
  • 필터가 범위의 10% 값에 접근하면 → 이상적으로는 micro-partition의 10%만 스캔
  • ⚠️ subquery를 포함한 predicate로는 pruning 불가 (서브쿼리 결과가 상수여도 안 됨)

포인트: "스캔된 micro-partition 비율 : 실제 선택 데이터 비율" 이 가까울수록 pruning 효율이 높다.


✅ 한 줄 포인트

  • Micro-partition = 50~500MB(비압축) · 컬럼 기반 · 불변(immutable) · 자동 생성 물리 파일
  • Metadata = MIN/MAX + distinct count → pruning의 연료
  • Pruning = MIN/MAX 보고 필요 없는 파티션 버리기 → 쿼리 가속

0개의 댓글