본문 바로가기

dev course - DE/TIL

[데브코스] TIL 34일차


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는 일대일 관계가 아님
  • 기본 데이터 타입
    • 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시, 원본 테이블의 속성이 따라감
      • 데이터 거버넌스와 시스템 무결성 유지를 목적으로 함
      • 테이블이나 뷰를 수정하는 경우, 이로 인한 영향을 자동으로 식별
      • 계승 관계 분석을 통한 더 세밀한 보안 및 액세스를 제어함

 

'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