Today I Learned

스노우플레이크(Snowflake) 기본개념 (1) 본문

카테고리 없음

스노우플레이크(Snowflake) 기본개념 (1)

하이라이터 2025. 8. 18. 08:38
728x90

주요 계층 구조

1) 스토리지 레이어 (Storage Layer)

  • Snowflake가 관리하는 클라우드 오브젝트 스토리지 기반
  • 하이브리드 컬럼 구조(컬럼에 저장된 행 세트)
  • 테이블은 기본적으로 마이크로 파티션(Micro-Partition) 단위로 저장
  • 마이크로 파티션(Micro-Partition)
    • 50~500MB 크기의 불변(immutable) 단위
    • 컬럼 단위 압축, Min/Max 통계 포함
    • Immutable → Time Travel, Zero-Copy Cloning 지원
    • Pruning: 쿼리 시 통계 정보를 이용해 불필요한 파티션은 읽지 않음
    • 데이터가 update되면 변경되는것이 아니라 새로운 마이크로 파티션이 생성
  • Interoperability Storage(외부 스토리지 연동) 옵션이 있어, 일부 테이블/파일 관리를 고객이 직접 수행 가능
  • 특징 (S3 기준)
    • 무제한 확장 가능 / 고내구성(다중 AZ에 복제 저장)
    • 사용 용량 기반 과금 / 비교적 저렴한 스토리지 비용
    • 자동 압축·암호화 / Write Once, Read Many(분석·보관 데이터)에 적합

2) 컴퓨팅 레이어 (Compute Layer)

  • Virtual Warehouse(VW)
    • 데이터 저장 기능 없이 순수 연산 전용 엔진 역할
    • 여러 웨어하우스를 동시에 운영 가능 (팀·업무별 분리 권장)
    • Auto Resume / Auto Suspend 지원 → 사용 시 비용 절감
    • Suspend 시 SSD 캐시 삭제 → 성능·비용 트레이드오프 고려 필요
    • 캐싱(SSD 기반)으로 동일 쿼리 재실행 시 비용 절감 가능
    • 동일 쿼리라도 XS 2시간 vs L 1시간 비용 동일 → 성능 향상 목적이면 사이즈 확대가 유리
    • xs 4대 vs M 1대
      • 비용은 동일하고 실제 노드 수도 동일함
      • VM 별로 메모리를 따로 가지기때문에 작은 VM은 대용량 쿼리나 캐시 재사용 시 문제
      • VM 단위로 요금이 청구되기 때문에 M의 리소스를 다 안쓰더라도 시간당 4credit이 과금

3) 클라우드 서비스 레이어 (Cloud Services Layer)

  • Snowflake의 "두뇌” - 컴퓨팅·스토리지 관리
  • 메타데이터 저장: 테이블 스키마, 마이크로 파티션 매핑, 통계
  • 인증·보안, 쿼리 최적화, 트랜잭션 관리
  • 테이블, 뷰, 권한, 스케줄링 등 관리 기능
  • 쿼리 옵티마이저가 쿼리 재작성(Query Rewrite) 및 Materialized View 자동 활용

4) 스노우그리드 레이어 (Snowgrid Layer)

  • Cross-Region, Cross-Cloud 복제 및 공유 지원
  • 글로벌 데이터 공유(Data Sharing) 및 멀티클라우드 환경에서의 데이터 접근 가능

데이터 보호 기능

CLONING

  • Zero-Copy Cloning
  • 마이크로 파티션 공유 → 복제 시 스토리지 비용 없음
  • 개발 또는 테스트 환경을 빠르게 활성화 및 백업에 사용
  • 변경 시에만 새로운 파티션 생성 → 변경분만 과금

Time Travel

  • 삭제/변경된 데이터 복원 가능
  • Standard: 최대 1일, Enterprise: 최대 90일
  • 특정 시점/쿼리 전 상태로 복원 가능

Fail-safe

  • Time Travel 만료 후 7일 보관
  • Snowflake 운영팀만 접근 가능(재해복구 목적)

테이블, 뷰

테이블

유형 특징
Permanent Table (기본) Time Travel(최대 90일) & Fail-safe(7일) 제공, 스토리지 비용 발생
Transient Table Fail-safe 없음, Time Travel 기본 1일, 스토리지 비용 절감
Temporary Table 세션 범위에서만 유지, 세션 종료 시 삭제
Dynamic Table 자동 Materialized Table처럼 동작, ETL/ELT 파이프라인에서 변환 목적
External Table 외부 스토리지(S3, GCS 등)에 있는 데이터를 참조, 마이크로 파티션 X
세미구조화 데이터+메타데이터 조합으로 유사 파티션 가능
Hybrid Table (Preview) OLTP + OLAP 혼합 목적, 낮은 지연의 트랜잭션 처리 가능

View

  • View: 가상 테이블, 데이터는 저장하지 않음
  • Materialized View:
    • 특정 쿼리 결과를 마이크로 파티션으로 저장해 성능 향상
    • 단일 테이블 기반만 지원
    • 쿼리 옵티마이저가 필요 시 자동 사용

캐시

메타데이터

  • 데이터에 대한 데이터: 테이블 구조, 컬럼 타입, 파티션 정보, 행카운트, 통계, 접근 권한, 실행 이력 등
  • 메타데이터가 필요한 쿼리에 사용 : SHOW, MIN/MAX(숫자 or 날짜 데이터), COUNT
  • 빠르고 VM을 사용하지 않기 때문에 비용 청구 X

쿼리 결과 캐시

  • 이전에 실행한 쿼리의 결과 집합(Result Set)을 저장 → 동일한 쿼리가 다시 실행되면 결과 즉시 반환
  • 디스크에 저장되는 캐시라서 웨어하우스가 꺼져 있어도 재사용 가능
  • 데이터가 변하지 않은 경우만 재사용됨 (절대 오래된 결과를 제공하지 않음)
  • 결과 캐시는 24시간동안 캐시
  • 쿼리 결과 캐시 사용 조건
    • 동일한 SQL: 대소문자까지 동일해야 함 (공백은 허용, 파라미터 바인딩 값도 동일)
    • 데이터 변경 없음: 참조한 테이블/뷰 데이터에 변경이 없어야 함 (마이크로 파티션이 동일해야함)

데이터 캐시

  • 쿼리 수행 중 읽은 원본 데이터(마이크로파티션)를 웨어하우스 로컬 SSD에 저장
  • → 동일한 데이터를 다시 조회하면 클라우드 스토리지 대신 로컬 SSD에서 읽어와 성능을 높임
  • 데이터 캐시는 웨어하우스별, 노드별로 유지됨
  • 💡 웨어하우스를 너무 자주 Suspend하면 SSD 캐시를 잃어 성능이 떨어질 수 있음

데이터 로드

파일 저장소 & 포맷

  • Internal Stage: Snowflake가 관리하는 스토리지
  • External Stage: S3, GCS, Azure Blob 등
  • File Format 객체를 만들어 CSV, JSON, Parquet 등 읽기 방식 지정

로드 시 데이터 변환

  • 컬럼 재정렬, 컬럼 생략 및 SELECT 구문을 사용하는 CAST 지원
  • Join, 필터, 집계 미지원 (빠른 로드 목적)

💡 대규모 단일 파일보다 다수의 작은 파일 업로드가 더 빠름(MPP 기반이기 때문)

연속 데이터 로드

  • Snowpipe 사용
  • 실시간/준실시간 데이터 로드 서비스
  • Trigger 기반 자동 실행 가능(Event Notification)
  • VM 필요없는 서버리스 모델 (비용은 전송 용량 당 청구)
  • Rest API로 호출시에만 실행하도록 설정도 가능

함수 / 프로시저 / Snowflake Scripting

User-Defined Function (UDF)

  • 목적: Built-in 함수로 제공되지 않는 기능을 사용자 정의 함수로 구현
  • 지원 언어: SQL, JavaScript, Python, Java, Scala 등 (Snowpark으로 비SQL 언어 지원)
  • 실행: 코드가 바이트코드 형태로 저장 → 웨어하우스에서 실행
  • 외부 라이브러리 사용: Stage에 업로드 후 IMPORT 가능
  • 제약:
    • 반드시 값을 반환해야 함 (스칼라 값 또는 테이블)
    • DDL·DML 불가, 트랜잭션 제어 불가
  • 권한: 생성자가 오너, 다른 사용자가 실행해도 오너 권한으로 동작
  • 유형
    • Scalar UDF - 단일 값 반환
    • Table UDF - 테이블 형태 반환
  • 보안: Secure UDF 지원 → 다른 계정에 안전하게 공유 가능

Stored Procedure (SP)

  • 목적: 여러 SQL 문과 로직을 묶어 캡슐화, 재사용 가능한 절차형 코드 실행
  • 지원 언어: SQL, JavaScript, Python 등
  • 특징
    • DDL, DML 모두 실행 가능 / 트랜잭션 제어 가능
    • 반환값이 없어도 됨
  • 활용: 배치 처리, 동적 쿼리, 데이터 로딩·정리 작업 자동화

UDF vs Stored Procedure 비교

구분 UDF SP
반환값 필수 (스칼라 or 테이블) 선택 (없어도 됨)
DDL/DML 불가 가능
트랜잭션 제어 불가 가능
주 용도 계산/변환 로직 작업 흐름·데이터 처리 캡슐화
권한 오너 권한 실행 고정 오너 권한/호출자 권한 선택 가능

 

Snowflake Scripting

  • Stored Procedure 구현 시 사용되는 절차형 SQL 문법 (Like 오라클의 PL/SQL)
  • 변수 선언, 조건문(IF), 반복문(FOR, WHILE), 예외 처리 가능
  • DML·DDL 실행 가능, 트랜잭션 제어 가능
  • 복잡한 ETL/배치 로직 캡슐화에 적합

 

728x90
Comments