데브코스 TIL

Snowflake 운영과 관리

예니ㅣ 2023. 11. 30. 14:04

강의

Snowflake

"Snowflake"는 클라우드 기반 데이터 웨어하우스에서 시작되어 현재는 데이터 클라우드로 발전하였습니다.

AWS, GCP, Azure 등의 글로벌 클라우드 위에서 모두 동작하는 멀티 클라우드 입니다.

 

Snowflake 특징

  • 스토리지와 컴퓨팅 인프라 별도 설정 → 가변 비용 모델
  • SQL 기반 빅데이터 저장, 처리, 분석 가능
  • 비구조화된 데이터 처리 및 머신러인 기능 제공
  • 배치 데이터 및 실시간 데이터 처리 지원
  • Time Travel : 과거 데이터 쿼리 기능 → 트렌드 분석 용이
  • 웹 콘솔 및 Python API 이용 가능
  • ODBC/JDBC 연결 지원
  • 클라우드 스토리지를 외부 테이블로 사용 가
  • 타지역에 데이터 공유(Cross-Region Replication) 기능 지원
  • 계정 구성도 : Databases ⊂ Accounts ⊂ Organizations
    1. Databases
      • Accounts에 속한 데이터를 다루는 논리적 컨테이너
      • 다수의 스키마, 테이블, 뷰로 구성
      • 스케일링 가능 및 독립적인 컴퓨팅 리소스(Warehouses) 포함
    2. Accounts
      • 자체 사용자, 데이터, 접근권한을 독립적으로 포함
      • 다수의 Databases로 구성
    3. Organizations
      • 한 고객의 모든 Snowflake 자원 통합 최상위 레벨 컨테이너
      • 다수의 Accounts 접근권한, 사용트래킹, 비용 관리에 사용
  • "Share, Don't Move"
  • Worksheets : Notebook과 유사하게 사용 가능

 

Snowflake 데이터 타입

Redshift보다 강력한 타입들을 제공합니다.

  • Numeric : TINYINT, SMALLINT, INTEGER, BININT, NUMBER, NUMERIC, DECIMAL, FLOAT, DOUBLE, REAL
  • Boolean : BOOLEAN
  • String : CHAR, VARCHAR, TEXT, BINARY, VARBINARY
  • Date 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

 

"Credit"은 쿼리 실행과 데이터 로드, 기타 작업 수행에 소비되는 계산 리소스를 측정하는 단위 입니다.

일반적으로 1 credit에 $2 ~ $4의 비용이 발생합니다.

컴퓨팅 비용, 스토리지 비용, 네트워크 비용이 각각 발생합니다.

 

Snowflake 초기 설정

"Worksheet"은 웹 SQL 에디터 입니다.

# 데이터베이스 생성
CREATE DATABASE dev;

# 스키마 생성
CREATE SCHEMA dev.raw_data;
CREATE SCHEMA dev.analytics;
CREATE SCHEMA dev.adhoc;
# 스키마 밑에 테이블 생성
CREATE OR REPLACE TABLE dev.raw_data.session_transaction(
	sessionid varchar(32) primary key,
    refunded boolean,
    amount int
);

CREATE OR REPLACE TABLE dev.raw_data.user_session_channel(
	userid integer,
	sessionid varchar(32) primary key,
    channel varchar(32)
);

CREATE OR REPLACE TABLE dev.raw_data.session_timestamp(
	sessionid varchar(32) primary key,
    ts timestamp
);
# 벌크 업데이트
COPY INTO dev.raw_data.session_transaction
FROM 's3://yeeen-test-bucket/test_data/session_transaction.csv'
credetials=(AWS_KEY_ID='*******' AWS_SECRET_KEY='*********')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY="");

COPY INTO dev.raw_data.user_session_channel
FROM 's3://yeeen-test-bucket/test_data/user_session_channel.csv'
credetials=(AWS_KEY_ID='*******' AWS_SECRET_KEY='*********')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY="");

COPY INTO dev.raw_data.session_timestamp
FROM 's3://yeeen-test-bucket/test_data/session_timestamp.csv'
credetials=(AWS_KEY_ID='*******' AWS_SECRET_KEY='*********')
FILE_FORMAT = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY="");
CREATE TABLE dev.analytics.mau_summary AS
SELECT
	TO_CHAR(TS.ts, 'YYYY-MM') AS month,
    COUNT(DISTINCT USC.userid) AS MAU
FROM raw_data.session_timestamp AS TS
JOIN raw_data.user_session_channel AS USC
	ON TS.sessionid = USC.sessionid
GROUP BY 1
ORDER BY 1 DESC;

SELECT * FROM dev.analytics.mau_summary LIMIT 10;

 

Snowflake 사용자 권한 설정

그룹이 아닌 역할을 이용하여 사용자 권한을 설정할 수 있습니다.

# 역할 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;

# 사용자 생성
CREATE USER yen PASSWORD="*********";

# 권한 지정
GRANT ROLE analytics_users TO USER yen;
# 역할별 권한 지정
# analytics_users
GRANT USAGE on schema dev.raw_data to ROLE anayltics_users;
GRANT SELECT on all tables in schema dev.raw_data to ROLE anayltics_users;
GRANT USAGE on schema dev.analytics to ROLE anayltics_users;
GRANT SELECT on all tables in schema dev.analytics to ROLE anayltics_users;
GRANT ALL on schema dev.adhoc to ROLE anayltics_users;
GRANT ALL on all tables in schema dev.adhoc to ROLE anayltics_users;

# anayltics_authors
GRANT ROLE anayltics_users TO ROLE anayltics_authors;
GRANT ALL on schema dev.analytics to ROLE anayltics_authors;
GRANT ALL on tables in schema dev.analytics to ROLE anayltics_authors;

 

Data Governance 관련 기능

  • Object Tagging
    • Enterprise 레벨에서만 가능
    • CREATE TAG 이용
    • tag 계승
  • Data Classification
    • Enterprise 레벨에서만 가능
    • Object Tagging의 개인 정보 관리를 매뉴얼하게 관리하기 위한 기능
    • Analyze → Review → Apply
SNOWFLAKE.CORE.PRIVACY_CATEGORY		# 상위 레벨
# IDENTIFIER(식별자), QUASI_IDENTIFIER(준식별자), SESITIVE

SNOWFLAKE.CORE.SEMANTIC_CATEGORY	# 하위 레벨
  • Tag based Masking Policies
    • Enterprise 레벨에서만 가능
    • Tag에 액세스 권한 지정
    • Tag Lineage 포함
  • Access History
    • Enterprise 레벨에서만 가능
    • 데이터 액세스에 대한 감사 추적 제공 → 보안 및 규정 준수
    • 다음 활동 추적 가능
  • Object Dependencies
    • 시스템 무결성 유지
    • 테이블 혹은 뷰를 수정한 경우, 작업이 끼친 영향 자동 식별
    • 계승 관계 분석을 통해 세밀한 보안 및 액세스 제어

 

Snowflake 기타 기능

  • Marketplace
    • Stripe Data Pipeline
  • Data Sharing : 데이터셋을 사내 혹은 파트너에게 스토리지 레벨에서 공유
  • Activity - Query/Copy/Task History

 

Snowflake 사용 중단

  • 무료 시험 기간 종료 혹은 크레딧 소진 시에 자동 Suspended 모드 변경
  • Snowflake 서포트에 이메일 전송하여 종료 가능

 


Data Governance

"Data Governance"는 데이터의 사용이 올바르게 이루어짐을 보장하기 위한 데이터 관리 프로세스 입니다.

 

Data Governance 목적

  • 데이터 기반 결정에서 일관성 및 품질 보장
  • 데이터를 통한 가치 생성
  • 데이터 관련 법규 준수

 

'데브코스 TIL' 카테고리의 다른 글

리눅스 이해하기  (0) 2023.12.12
BI 대시보드  (0) 2023.12.01
데이터 웨어하우스 옵션  (1) 2023.11.27
상속(Inheritance)과 오버라이딩(Overriding)  (0) 2023.11.06
관계형 데이터베이스(RDB)  (0) 2023.11.06