[DevCourse] 10-2 Snowflake 운영과 관리

한상우·2024년 1월 23일
0

Data Science Devcourse

목록 보기
16/25

Snowflake이란?

  • 클라우드 기반 데이터웨어하우스
  • 글로벌 클라우드(AWS, GCP, Azure)위에서 모두 동작하는 멀티클라우드
  • 데이터 판매를 통해 매출을 가능하게 해주는 Data Sharing / Marketplace 기능을 제공

Snowflake의 특징

  • 스토리지와 컴퓨팅 인프라가 별도로 설정되는 가변 비용 모델
  • SQL 기반으로 빅데이터 저장/처리/분석
  • 비구조화된 데이터 처리와 머신러닝 기능도 제공
  • CSV, JSON, Avro, Parquet 등 다양한 데이터 포멧을 지원
  • Time Travel이라는 기능으로 트렌드를 분석하기 쉽게 해줌
  • 웹 콘솔 이외에도 Python API를 통한 관리, 제어 가능

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
  • 새롭게 만든 table에 대해 COPY를 통해 벌크 업데이트
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='"');
  • 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의 사용자 권한 설정

  • Snowflake는 Group를 지원하지 않고, Role로 사용자의 권한을 설정한다

  • 특정한 이름의 Role을 만들고, 해당 Role에 대한 access 권한을 따로 설정해 줄 수 있다

  • 이와 같은 구조는 상속의 개념과 같이 활용 가능하다 (재사용성이 좋아진다)

    • ex) "analytics_users"가 이미 존재하는 상태에서 "analytics_authors"를 새롭게 만들 때 전자의 내용을 상속하고, "analytics 테이블들"에 대한 access 권한만 추가해주면 된다
  • Column/Row Level 보안이 가능하다 (즉, 특정 테이블에 민감한 정보가 있는 col/row에 access 권한 설정 가능). 하지만 일반적인 경우 민감한 정보는 따로 떼어내 하나의 Table에서 관리하는 것이 좋다

Snowflake의 Data Governance 관련 기능 (Enterprise 기준)

  • Data Governance란?

    • 필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스
    • 보통 데이터의 품질 보장데이터 관련 법규 준수를 목적으로 한다
      • 품질 : KPI등의 지표 정의와 계산에 있어 일관성 제공, Data Silos를 없애기, ...
      • 법규 : 적절한 권한 설정과 보안 프로세스를 통한 개인 정보 보호
  • 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를 볼 수 있는 기능

profile
개인 공부용 블로그입니다

0개의 댓글

관련 채용 정보