Snowflake의 캐싱 작동 방식

Snowflake 데이터 파이프라인 자동화

Emily Melhuish

Technical Curriculum Developer, Snowflake

세 가지 캐싱 레이어

캐싱 레이어.png

Snowflake는 세 가지 수준에서 결과를 캐싱하며, 범위와 유지 기간이 각기 다릅니다

  • 결과 캐시 — 쿼리 결과 전체를 저장하고, 웨어하우스 실행 없이 반환
  • 웨어하우스(데이터) 캐시 — 최근 스캔한 마이크로 파티션을 메모리 및 SSD에 저장
  • 메타데이터 캐시 — 항상 활성화; 쿼리 계획 시 테이블 통계 활용
Snowflake 데이터 파이프라인 자동화

결과 캐시 사용 조건(및 미사용 조건)

쿼리가 즉시 캐시된 결과를 사용자에게 반환하는 Snowflake 쿼리 결과 캐시 흐름 다이어그램

조건 캐시 미스 발생 시…
쿼리 텍스트가 정확히 일치 대소문자, 공백, 별칭이 다른 경우
재사용 불가 함수 없음 실행마다 바뀌는 함수: RANDOM
기반 테이블 변경 없음 마지막 실행 이후 DML, 재클러스터링, 통합
지속된 결과 사용 가능 24시간 TTL 만료(재사용 없을 경우) 또는 31일 경과
역할에 필요한 권한 있음 SELECT: 역할에 권한 없음 / SHOW: 다른 역할 사용
Snowflake 데이터 파이프라인 자동화

웨어하우스 캐시와 메타데이터 캐시

웨어하우스 캐시 히트 및 캐시 미스 시나리오를 보여주는 Snowflake 데이터 캐시 다이어그램

웨어하우스 캐시

  • 최근 스캔한 마이크로 파티션을 웨어하우스 SSD + 메모리에 저장
  • 웨어하우스 일시 정지 시 삭제됨
  • 캐시 유지를 위해 자동 일시 정지 시간을 충분히 설정

메타데이터 캐시

  • 항상 활성화; 클라우드 서비스에 존재
  • 테이블 통계 저장
  • 일부 쿼리는 메타데이터만으로 응답 가능
Snowflake 데이터 파이프라인 자동화

파티션 프루닝을 방지하는 SQL 패턴

파티션 프루닝 방지:

SELECT *
FROM logistics.shipments
WHERE MONTH(dispatch_date) = 3;

파티션 프루닝 허용:

SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
  AND dispatch_date <  '2024-04-01';
Snowflake 데이터 파이프라인 자동화

피해야 할 SQL 패턴 두 가지

SELECT * 사용 지양

-- Reads every column
SELECT * 
FROM logistics.shipments 
WHERE region = 'EMEA';

-- Reads only what's needed
SELECT shipment_id
, delivery_days 
FROM logistics.shipments 
WHERE region = 'EMEA';

암묵적 크로스 조인 사용 지양

-- Missing join condition = Cartesian
SELECT s.shipment_id
, c.name 
FROM shipments s, carriers c;

-- Explicit JOIN with ON condition
SELECT s.shipment_id
, c.name 
FROM shipments s 
JOIN carriers c ON s.carrier_id = c.id;
Snowflake 데이터 파이프라인 자동화

연습해 봅시다!

Snowflake 데이터 파이프라인 자동화

Preparing Video For Download...