1. Snowflake - 개요와 특징
- 개요
- '14년에 클라우드 기반 데이터 웨어하우스로 시작됨
- 글로벌 클라우드 위에서 모두 동작 - 멀티클라우드
- 데이터 판매를 통한 매출을 가능하게 함 - Data sharing/Marketplace
- Data sharing - data set을 사내 혹은 파트너에게 스토리지 레벨에서 공유하는 방식
- Data Marketplace - 데이터를 다른 이에게 무료/유료로 공유할 수 있음
- ETL과 다양한 데이터 통합 기능 제공
- 특징
- 가변 비용 모델
- SQL 기반으로 빅데이터 저장, 처리, 분석을 가능하게 함
- csv, json, Avro, Parquet 등과 같은 다양한 데이터 포맷 지원
- S3, GC 클라우드 스토리지, Azure Blog 스토리지도 지원
- 배치 데이터 중심이지만, 실시간 데이터 처리도 지원
- Time Travel : 과거 데이터 쿼리 기능으로 트렌드 분석을 쉽게 해줌
- 웹 콘솔 이외에도 Python API를 통한 관리/제어 가능
- 자체 스토리지 이외에도 클라우드 스토리지를 외부 테이블로 사용 가능
- 멀티 클라우드와 다른 지역에 있는 데이터 공유(Cross-Region Replication) 기능 지원
- 계정 구성도 = Organization => 1+ Account => 1+ Databases
- 대표 고객
- Siemens, Flexport, Iterable, Affirm, PepsiCo, ...
- 계정 구성도
- Organizations
- 한 고객이 사용하는 모든 snowflake 자원을 통합하는 최상위 레벨 컨테이너
- 하나 혹은 그 이상의 account들로 구성되며, 이 모든 account들의 접근 권한, 사용 트래킹, 비용들을 관리하는데 사용됨
- Accounts
- 하나의 Accounts는 자체 사용자, 데이터, 접근 권한을 독립적으로 가짐
- 하나 혹은 그 이상의 Database로 구성됨
- Databases
- 하나의 Database는 한 Account에 속한 데이터를 다루는 논리적인 컨테이너
- 다수의 스키마와 거기에 속한 테이블, 뷰 등으로 구성되어 있음
- PB 단위까지 스케일 가능하고 독립적인 컴퓨팅 리소스를 갖게됨
- 컴퓨팅 리소스를 warehouses라 부름
- warehouses와 databases는 일대일 관계가 아님
- Organizations
- 기본 데이터 타입
- Numeric : TINYINT, SMALLINT, INTEGER, BIGINT, NUMBER, NUMERIC, DECIMAL, FLOAT, DOUBLE, REAL
- Boolean : BOOLEAN
- String : CHAR, VARCHAR, TEXT, BINARY, VARBINARY
- Datd and Time : DATE, TIME, TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_TZ
- Semi-structured data : VARIANT (JSON, OBJECT)
- Binary : BINARY, VARBINARY
- Geospatial : GEOGRAPHY, GEOMETRY
- Array : ARRAY
- Object : OBJECT
2. Snowflake - 비용
- Credit
- 쿼리 실행과 데이터 로드, 기타 작업 수행에 소비되는 계산 리소스를 측정하는 단위
- 1 credit은 상황에 따라 다르지만 대략 $2 - $4의 비용을 발생시킴
- 비용 구조
- 컴퓨터 비용 - 크레딧으로 결정됨
- 스토리지 비용 - TB당으로 계산됨
- 네트워크 비용 - 지역간 데이터 전송 혹은 다른 클라우드간 데이터 전송시 TB당 계산
3. Snowflake - 실습
- COPY로 벌크 업데이트 수행하기
- AWS S3에 있는 테이블을 통째로 복사해오려면 먼저 IAM 사용자를 만들어야함
- 보안을 위해 Readonly로 사용자를 생성하고 액세스 키를 생성해 그 아이디와 비밀번호를 snowflake COPY 명령어에서 쓰면 됨
COPY INTO dev.raw_data.session_timestamp
FROM 's3://yejin-test-bucket/test_data/session_timestamp.csv'
credentials=(AWS_KEY_ID='...' AWS_SECRET_KEY='...')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY='"');
- Role과 User 생성
- snowflake는 group을 지원하지 않음
-- 3개의 ROLE 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
-- ROLE 설정
GRANT USAGE on schema dev.raw_data to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.raw_data to ROLE analytics_users;
GRANT USAGE on schema dev.analytics to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.analytics to ROLE analytics_users;
GRANT ALL on schema dev.adhoc to ROLE analytics_users;
GRANT ALL on all tables in schema dev.adhoc to ROLE analytics_users;
GRANT ROLE analytics_users TO ROLE analytics_authors; -- 계승 가능
GRANT ALL on schema dev.analytics to ROLE analytics_authors;
GRANT ALL on all tables in schema dev.analytics to ROLE analytics_authors;
-- 사용자 생성
CREATE USER yejin PASSWORD='...';
-- 사용자에게 analytics_users 권한 지정
GRANT ROLE analytics_users TO USER yejin;
4. Snowflake - 데이터 거버넌스 관련 기능
- 데이터 거버넌스
- 필요한 데이터가 적재적소에 올바르게 사용되는지를 보장하기 위한 데이터 관리 프로세스로, 다음을 주 목적으로 함
- 데이터 품질 보장
- 데이터 기반 결정에서의 일관성
- 데이터를 이용한 가치 생성
- 데이터 관련 법규 준수
- 필요한 데이터가 적재적소에 올바르게 사용되는지를 보장하기 위한 데이터 관리 프로세스로, 다음을 주 목적으로 함
- 데이터 거버넌스 관련 기능(Standard 레벨에서는 불가)
- Object tagging
- CREATE TAG로 생성
- 지정된 태그는 구조를 따라 계승됨
- Data classification - 자동 태깅
- Object tagging을 매뉴얼하게 관리하기 쉽지 않아 나온 기능
- Analyze, Review, Apply 3가지 스텝으로 구성됨
- Analyze - 테이블에 적용시 개인정보나 민감정보가 있는 컬럼을 분류함
- Review - 이를 사람(데이터 엔지니어)이 보고 최종 리뷰(결과 수정 가능)
- Apply - 최종 결과를 System tag로 적용함
- 식별자와 준식별자
- 식별자(Identifier) - 개인을 바로 지칭 가능
- 준식별자(Quasi Identifier) - 몇 개의 조합으로 지칭 가능
- Tag based Masking Policies - 태그에 따라 액세스 권한을 제어함
- Tag에 액세스 권한을 지정
- Access History - 사용자 별로 행동 히스토리를 알 수 있음. 추후 보안과 관련된 감사에 쓰임
- 목적은 데이터 액세스에 대한 감사 추적을 제공해 보안과 규정을 준수하기 위함
- 데이터베이스 로그인, 실행된 쿼리, 테이블 및 뷰 액세스, 데이터 조작 작업 등의 추적 가능
- 다른 모든 클라우드 데이터 웨어하우스에서 제공됨
- Object Dependencies - ELT시, 원본 테이블의 속성이 따라감
- 데이터 거버넌스와 시스템 무결성 유지를 목적으로 함
- 테이블이나 뷰를 수정하는 경우, 이로 인한 영향을 자동으로 식별
- 계승 관계 분석을 통한 더 세밀한 보안 및 액세스를 제어함
- Object tagging
'dev course - DE > TIL' 카테고리의 다른 글
[데브코스] TIL 41일차 (0) | 2024.05.21 |
---|---|
[데브코스] TIL 35일차 (0) | 2024.05.11 |
[데브코스] TIL 33일차 (0) | 2024.05.09 |
[데브코스] TIL 32일차 (0) | 2024.05.08 |
[데브코스] TIL 31일차 (0) | 2024.05.07 |