반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 완주하지 못한 선수
- @EnableScheduling
- 모던 자바 인 액션
- 해시
- 스택/큐
- 쿠버네티스
- @configuration
- kubenetes
- 알고리즘
- @Setter
- H-index
- 전화번호 목록
- 루씬 인 액션
- 커링
- 크론 표현식
- 기능개발
- 가장 큰 수
- 롬복 어노테이션
- K번째수
- 영속 자료구조
- 정렬
- 코딩 테스트
- @Getter
- 고차원 함수
- 검색 기능 확장
- Java
- 프로그래머스
- 스프링 스케쥴러
- @Data
- 다리를 지나는 트럭
Archives
- Today
- Total
Today I Learned
스노우플레이크(Snowflake) 기본개념 (1) 본문
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