Snowflake이란?
Snowflake의 특징
Snowflake 실습
기본적으로 Snowflake 30일 무료 체험판을 사용하여 실습을 진행한다
Snowflake에서 S3 버킷을 접근하기 위해 IAM 사용자를 먼저 생성해준다
사용할 데이터를 S3 버킷에 업로드한다
새로운 DB 만들기 (role이 ACCOUNTADMIN인 경우만 가능)
S3에 올려놓은 데이터로 snowflake에서 Table 만들기
CREATE OR REPLACE TABLE dev.raw_data.session_transaction (
sessionid varchar(32) primary key,
refunded boolean,
amount int
); -- s3://sang-sw-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://sang-sw-test-bucket/test_data/user_session_channel.csv
CREATE TABLE dev.raw_data.session_timestamp (
sessionid varchar(32) primary key,
ts timestamp
); -- s3://sang-sw-test-bucket/test_data/session_timestamp.csv
COPY INTO dev.raw_data.session_timestamp
FROM 's3://sang-sw-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='"');
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의 사용자 권한 설정
Snowflake는 Group를 지원하지 않고, Role로 사용자의 권한을 설정한다
특정한 이름의 Role을 만들고, 해당 Role에 대한 access 권한을 따로 설정해 줄 수 있다
이와 같은 구조는 상속의 개념과 같이 활용 가능하다 (재사용성이 좋아진다)
Column/Row Level 보안이 가능하다 (즉, 특정 테이블에 민감한 정보가 있는 col/row에 access 권한 설정 가능). 하지만 일반적인 경우 민감한 정보는 따로 떼어내 하나의 Table에서 관리하는 것이 좋다
Snowflake의 Data Governance 관련 기능 (Enterprise 기준)
Data Governance란?
Object Tagging : 정의되어 있는 TAG(시스템, 사용자)를 [계정, 스키마, 테이블, 컬럼, ...]에 지정 가능. 지정된 tag는 구조를 따라 계승됨. Metadata를 관리하는 용도로 사용 되며, 주로 개인정보와 관련된 데이터를 관리하는 용도이다.
Data Classification : 모든 Tagging을 사람이 하나하나 확인하기는 어렵기 때문에 Snowflake가 자동으로 개인정보나 민감정보가 있는 컬럼들을 분류해준다. 사람이 이를 확인하고, 최종적으로 리뷰한 후 Tag를 적용한다.
Tag Based Masking Policies : 특정 Tag가 붙은 Object에 대한 접근권한을 설정 가능
Access History : 어떤 사용자가 어떤 데이터에 접근하였는지 감사 추적 기능을 제공 (DB 로그인, 실행된 쿼리, 테이블 및 뷰 엑세스, 데이터 조작 작업, ...)
Object Dependencies : 테이블이나 뷰를 수정하는 경우 이로 인한 영향을 Snowflake가 자동으로 식별하여 경고해주는 기능. 시스템 무결성을 유지해주는 기능이다.
Snowflake의 기타 기능
Marketplace : 외부 데이터 소스를 쉽게 연결할 수 있는 기능이다. 즉, ETL을 쉽게(코딩을 최소화하여) 사용할 수 있도록 해주는 기능이다.
Data Sharing : 다른 사용자와 데이터의 공유를 쉽게 할 수 있도록해주는 기능
Activity : Query, Copy, Task와 관련된 history를 볼 수 있는 기능