Snowflake 운영과 관리
Snowflake 특징 소개
Snowflake 소개
2014년에 클라우드 기반 데이터 웨어하우스로 시작하였고, 지금은 데이터 클라우드라고 부를 정도로 발전하였다. 글로벌 클라우드(AWS, GCP, Azure)에서 모두 동작하며, ETL과 다양한 데이터 통합 기능을 제공한다.
Snowflake 특징 (1)
- 스토리지와 컴퓨팅 인프라가 별도로 설정되는 가변 비용 모델
- SQL 기반으로 빅데이터 저장, 처리, 분석을 가능하게 해 줌
- 비구조화된 데이터 처리와 머신러닝 기능도 제공
- CSV, JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷 지원
- 배치 데이터 중심이지만 실시간 데이터 처리 지원
- Time Travel : 과거 데이터 쿼리 기능으로 트렌드를 분석하기 쉽게 해 줌
- 웹 콘솔 이외에도 Python API를 통한 관리 / 제어 가능
- 자체 스토리지 이외에도 클라우드 스토리지를 외부 테이블로 사용 가능
Snowflake 특징 (2)
멀티 클라우드와 다른 지역에 있는 데이터 공유(Cross-Region Replication) 기능을 지원한다. Snowflake는 Organization 아래에 1개 이상의 Account가 있고, Account는 1개 이상의 Databases가 존재한다. 회사의 크기에 따라 Organization부터 시작할 수도 있고, Account부터 시작할 수도 있다.
- Snowflake 계정 구성도 : Organization > 1 + Account > 1 + Databases
Database Layer |
Query Processing Layer (Virtual Warehouses) |
Cloud Services (AWS, Google Cloud, Azure) |
Snowflake 특징 (3)
- Organization
- 한 고객이 사용하는 모든 Snowflake 자원을 통합하는 최상위 레벨 컨테이너
- 하나 이상의 Account로 구성되며, 모든 Account의 접근 권한, 사용트래킹, 비용을 관리하는 데 사용
- Account
- 하나의 Account는 자체 사용자, 데이터, 접근 권한을 독립적으로 가짐
- 한 Account는 하나 이상의 Database로 구성
- Databases
- 하나의 Database는 한 Account에 속한 데이터를 다루는 논리적인 컨테이너
- 한 Database는 다수의 스키마와 거기에 속한 테이블과 뷰 등으로 구성
- 하나의 Database는 PB 단위까지 스케일 가능하고 독립적인 컴퓨팅 리소스를 갖게 됨
- 컴퓨팅 리소스 : Warehouses라고 부르며, Databases와 무조건 일대일 관계는 아님
Snowflake 특징 (4)
- Data Marketplace : 데이터를 판매하거나 공유할 수 있는 서비스 제공
- Data Sharing : 데이터 셋을 복사하는 것이 아니라 스토리지 레벨에서 공유하는 방식
Snowflake 비용 구조
- 컴퓨팅 비용 : Warehouses의 크레딧에 따라 결정
- 스토리지 비용 : TB 당으로 계산
- 네트워크 비용 : 지역 간 데이터 전송 혹은 다른 클라우드 간 데이터 전송 시 TB 당 계산
Snowflake 실습을 위한 초기 환경 설정
Database, Schema 생성
CREATE DATABASE dev;
CREATE SCHEMA dev.raw_data;
CREATE SCHEMA dev.analytics;
CREATE SCHEMA dev.adhoc;
3개의 테이블을 raw_data 밑에 생성
CREATE OR REPLACE TABLE은 만약 테이블이 존재하면 DROP 후 새로 만들고, 존재하지 않으면 그냥 새로 만든다. 위험성은 있지만, 편리하게 사용할 수 있다.
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
COPY를 사용해 벌크 업데이트 수행
문법이 Redshift와 비슷하지만, 동일하지는 않다. AWS 어드민 사용자의 AWS KEY ID와 AWS SECRET KEY를 사용하면 안 된다. Snowflake의 S3 버킷 액세스를 위한 전용 사용자를 IAM으로 만들고 S3 읽기 권한을 부여하고, 그 사용자의 액세스 키를 생성 후 AWS KEY ID와 AWS SECRET KEY를 사용해야 한다. 아래의 COPY 코드를 테이블 별로 각각 진행해 주면 된다.
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='"');
Snowflake 사용자 권한 설정
Snowflake는 Group을 지원하지 않는다.
Role과 User 생성
-- 3개의 ROLE 생성
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;
-- 사용자 생성
CREATE USER keeyong PASSWORD='password';
-- 사용자에게 권한 지정
GRANT ROLE analytics_users TO USER keeyong;
사용자 역할 권한 설정
analytics_authors는 데이터 분석가가 갖는 권한이고, ELT를 통해 새로운 요약 테이블을 만들어야 하기 때문에 analytics 쓰기 권한도 갖는다. analytics_users는 데이터 소비자이며, 분석 / 시각화를 진행하는 사람이 갖는 권한이다. 여기서 analytics 테이블의 권한 말고는 모두 동일하다.
사용자 역할 권한 설정 - analytics_users, analytics_authors
그룹 권한을 설정하는 것보다 훨씬 간단하게 작성이 되며, 이후 관리도 편하다.
-- set up analytics_users
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;
-- set up analytics_authors
GRANT ROLE analytics_users TO ROLE analytics_authors;
GRANT ALL on schema dev.analytics to ROLE analytics_authors;
GRANT ALL on all table in schema dev.analytics to ROLE analytics_authors;
Data Governance
필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스이다. 품질 보장과 데이터 관련 법규 준수를 주목적으로 한다. Data Governance 기능은 Standard에서는 불가능하고, Enterprise부터 사용이 가능하다.
- 데이터 기반 결정에서의 일관성
- 데이터를 위한 가치 만들기
- 데이터 관련 법규 준수
Data Governance 관련 기능 - Object Tagging
문자열을 Snowflake object(계정, 스키마, 테이블, 컬럼, 뷰 등)에 지정 가능하다. CREATE TAG로 생성하며, 지정된 태그는 구조를 따라 계승된다. 주요 용도 중 하나는 개인 정보 관리이다.
Data Governance 관련 기능 - Data Classification
Object Tagging을 활용해서 매뉴얼 하게 관리하기 쉽지 않다. 그래서 나온 기능이 Data Classification이며, 자동으로 해당 데이터가 어떤 정보를 갖고 있는지 판별한다.
- Analyze : 테이블에 적용하면 개인정보나 민감 정보가 있는 컬럼을 분류
- Review : 사람(보통 데이터 엔지니어)이 보고 최종 리뷰, 결과 수정도 가능
- Apply : 최종 결과를 System Tag로 적용
- 식별자 (Identifier) : 개인을 바로 지칭 (이메일, 이름, 전화번호 등)
- 준 식별자 (Quasi Identifier) : 몇 개의 조합으로 지칭 가능 (나이, 성별, 생년월일 등)
Data Governance 관련 기능 - Tag based Masking Policies
Tag에 대해 액세스 권한을 지정한다. 해당 Tag가 지정된 Snowflake Object의 액세스 권한을 제한하는 방식이다. 앞서 본 개인정보와 같은 Tag에 부여할 때 많이 사용된다.
Data Governance 관련 기능 - Access History
데이터 액세스에 대한 감사 추적을 제공하여 보안과 규정 준수를 목적으로 한다. 잠재적인 보안 위반이나 무단 액세스 시도의 조사를 가능하게 해 주며, 캡처된 정보에는 사용자 신원, IP, 타임스탬프 및 세부 정보가 포함된다.
Data Governance 관련 기능 - Object Dependencies
데이터 거버넌스와 시스템 무결성 유지를 목적으로 한다. 테이블이나 뷰를 수정하는 경우 이로 인한 영향을 자동으로 식별한다. 계승 관계 분석을 통한 세밀한 보안 및 액세스 제어가 가능하다.
'[프로그래머스] 데이터 엔지니어링 데브코스 3기 > TIL(Today I Learn)' 카테고리의 다른 글
[TIL - 41일 차] 데이터 파이프라인과 Airflow (1) (0) | 2024.05.20 |
---|---|
[TIL - 35일 차] 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (5) (0) | 2024.05.10 |
[TIL - 33일 차] 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (3) (0) | 2024.05.08 |
[TIL - 32일 차] 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (2) (0) | 2024.05.07 |
[TIL - 31일 차] 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (1) (2) | 2024.05.06 |