DevCourse TIL Day4 Week8

김태준·2023년 5월 25일
0

Data Enginnering DevCourse

목록 보기
34/93
post-thumbnail

✅ Snowflake

  • ETL과 다양한 데이터 통합 기능 제공
  • 멀티클라우드(글로벌 클라우드 위에서 모두 동작 (AWS, GCP, Azure))
  • 데이터 판매를 통해 매출을 가능케 해주는 DataSharing/Marketplace 제공
  • 스토리지, 컴퓨팅 인프라가 별도 설정되는 가변 비용 모델
  • SQL 기반 빅데이터 저장, 처리, 분석 가능 (비구조화 데이터 처리, ML 기능 제공)
  • S3, GC 클라우드 스토리지, CSV, JSON, Avro, Parquet 등 다양한 포맷 지원
  • Batch 데이터 중심이지만 실시간 데이터 처리 지원
  • Time Travel : 과거 데이터 쿼리 기능으로 트렌드 분석 가능
  • 웹 콘솔외에도 Python API 통해 관리, 제어 가능
  • Cross-Region Replication 기능도 지원
  • 계정 구성도
    Organizaion : 한 고객이 사용하는 모든 snowflake자원을 통합하는 최상위 레벨 container, 하나 이상의 account들로 구성되며 각 account들의 권한, 트래킹, 비용 관리에 사용
    Account : 각 계정은 자체 user, data, 접근권한을 독립적으로 가지며 한 account는 하나 이상의 DB로 구성
    DB : 한 DB는 논리적인 컨테이너로 다수의 스키마와 테이블, 뷰 등으로 구성되고 PB단위까지 스케일 가능하며 독립적인 컴퓨팅 리소스(Warehouse)를 갖게 된다.

🎈 Data type

● Numeric: TINYINT, SMALLINT, INTEGER, BIGINT, 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

✅ Snowflake 초기 환경 설정 및 training

  1. DEV DB 밑에 raw_data, analytics, adhoc 3개의 스키마 생성하기
    SQL Worksheet 클릭 후 DB 지정해서 실행 (안하면 DB.스키마.테이블로 호출해야 함)
CREATE DATABASE dev;
CREATE SCHEMA dev.raw_data;
CREATE SCHEMA dev.analytics;
CREATE SCHEMA dev.adhoc;
  1. raw_data 스키마 밑에 3개의 테이블 생성 (ROLE: AccountADMIN)
# 테이블이 존재하면 지우고 새로 만들어라 : CREATE OR REPLACE
CREATE OR REPLACE TABLE dev.raw_data.session_transaction (
	sessionid varchar(32) primary key,
    refunded boolean, 
    amount int
); --s3://keeyong-test-bucket/test_data/session_transaction.csv

CREATE TABLE dev.raw_data.user_session_channel (
	userid integer,
 	sessionid varchar(32) primary key,
 	channel varchar(32)
); -- s3://keeyong-test-bucket/test_data/user_session_channel.csv

CREATE TABLE dev.raw_data.session_timestamp (
	sessionid varchar(32) primary key,
 	ts timestamp
); -- s3://keeyong-test-bucket/test_data/session_timestamp.csv
  1. 3개의 테이블에 대해 COPY 사용해 bulk update 수행
COPY INTO dev.raw_data.session_timestamp
FROM 's3://keeyong-test-bucket/test_data/session_timestamp.csv'
credentials = (AWS_KEY_ID = 'A...EK'AWS_SECRET_KEY='X..UH')
FILE_FORMAT = = (type='CSV' skip_header=1 FIELD_OPTIONALLY_ENCLOSED_BY='"');
  • AWS admin user의 AWS KEY ID, AWS SECRET KEY 사용 X
  • Snowflake의 S3 버킷 액세스를 위한 전용 user를 IAM으로 만들고 S3 SELECT 권한 부여
    --> 이후 해당 user의 KEY ID, SECRET KEY 사용
  1. analytics 스키마 밑에 테이블을 CTAS 구문으로 생성
CREATE TABLE dev.analytics.mau_summary AS
SELECT
	TO_CHAR(A.ts, 'YYYY-MM') AS month,
 	COUNT(DISTINCT B.userid) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1 
ORDER BY 1 DESC;

# 잘만들어졌나 확인
SELECT * FROM dev.analytics.mau_summary LIMIT 10;

✅ 사용자 권한 설정

Snowflake에서는 group을 지원하지 않는다.

# - 3개의 ROLE을 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
# -- 사용자 생성
CREATE USER 유저명 PASSWORD='비밀번호';
# -- 사용자에게 analytics_users 권한 지정
GRANT ROLE analytics_users TO USER 유저명;

# 만들어둔 analytic_users, analytics_author ROLE 설정
# raw_data, analytics 읽기만, adhoc은 모든 권한 부여
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;
# analytics_authors에는 analytics도 모든 권한 부여
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

✅ Data Governance

: 필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스
목적은 다음과 같다.

  • 데이터 기반 의사결정에서의 일관성 확보 - KPI 지표 정의, 계산
  • 데이터를 이용해 Value 만들기 - Data silos 제거
  • 데이터 관련 법규 준수 - 개인정보 보호 (CLS, RLS)

관련 기능은 다음과 같다. (Standard레벨에서는 효과 X)

🎈 Object Tagging

  • Enterprise 레벨에서만 가능한 기능으로 CREATE TAG로 생성가능하다. (시스템 태그도 존재하고 문자열을 snowflake object(계정, 스키마, 테이블, 컬럼, 뷰 등)에 지정이 가능하다.)
  • 개인정보 보호가 주요 용도 중 하나

🎈 Data Classification

개인 정보 보호를 매뉴얼하게 관리하기 위해 등장
아래 3가지 스텝으로 구성됨.

  • analyze : 테이블에 적용 시 개인정보나 민감정보가 들어간 컬럼 분류
  • review : 이를 사람(엔지니어)이 보고 최종 리뷰 (결과 수정도 가능)
  • apply : 최종 결과를 시스템 태그로 적용 (PRIVACY_CATEGORY(상위레벨) - IDENTIFIER(개인정보), QUASI_IDENTIFIER(개인정보유추가능), SENSITIVE(민감정보 ex) 연봉 등),
    SEMANTIC_CATEGORY(하위레벨로 더 detail)

🎈 Tag based masking Policies

  • 태그에 액세스 권한 지정. (해당 태그가 지정된 object의 액세스 권한을 그에 맞춰 제한)
  • 앞서 본 개인정보와 같은 태그에 부여하는 것이 일반적임.

🎈 Access History

  • 데이터 액세스에 대한 감사 추적을 제공하여 보안과 규정을 준수하는 것이 목적
  • DB 로그인, 실행된 쿼리, 테이블이나 뷰 액세스, 데이터 조작 작업 추적 가능

🎈 Object Dependencies

  • 거버넌스와 시스템 무결성 유지가 목적
  • 테이블, 뷰를 수정하는 경우 이로 인해 발생할 영향 식별
  • 계승 관계 분석을 통해 더 세밀한 보안, 액세스를 제어하는 기능 제공한다.
profile
To be a DataScientist

0개의 댓글