강의
Snowflake
"Snowflake"는 클라우드 기반 데이터 웨어하우스에서 시작되어 현재는 데이터 클라우드로 발전하였습니다.
AWS, GCP, Azure 등의 글로벌 클라우드 위에서 모두 동작하는 멀티 클라우드 입니다.
Snowflake 특징
- 스토리지와 컴퓨팅 인프라 별도 설정 → 가변 비용 모델
- SQL 기반 빅데이터 저장, 처리, 분석 가능
- 비구조화된 데이터 처리 및 머신러인 기능 제공
- 배치 데이터 및 실시간 데이터 처리 지원
- Time Travel : 과거 데이터 쿼리 기능 → 트렌드 분석 용이
- 웹 콘솔 및 Python API 이용 가능
- ODBC/JDBC 연결 지원
- 클라우드 스토리지를 외부 테이블로 사용 가
- 타지역에 데이터 공유(Cross-Region Replication) 기능 지원
- 계정 구성도 : Databases ⊂ Accounts ⊂ Organizations
- Databases
- Accounts에 속한 데이터를 다루는 논리적 컨테이너
- 다수의 스키마, 테이블, 뷰로 구성
- 스케일링 가능 및 독립적인 컴퓨팅 리소스(Warehouses) 포함
- Accounts
- 자체 사용자, 데이터, 접근권한을 독립적으로 포함
- 다수의 Databases로 구성
- Organizations
- 한 고객의 모든 Snowflake 자원 통합 최상위 레벨 컨테이너
- 다수의 Accounts 접근권한, 사용트래킹, 비용 관리에 사용
- Databases
- "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 |