주제
1. Snowflake 소개
2. Snowflake 실습 ( + AWS S3 Bucket)
3. Data Governance 관련 기능
Snowflake 소개
- 2014년에 클라우드 기반 데이터웨어하우스로 시작됨
- 글로벌 클라우드 위에서 모두 동작 - 멀티클라우드
- 데이터 판매를 통한 매출을 가능하게 해주는 Data Sharing / Marketplace 제공
- 특징 :
- 스토리지와 컴퓨팅 인프라가 별도로 설정되는 가변 비용 모델
- 다양한 데이터 포맷 지원
- SQL 기반으로 빅데이터 저장, 처리, 분석을 가능하게 함
- 실시간 데이터 처리 지원
- Time Travel : 과거 데이터 쿼리 기능으로 트렌드를 분석하기 쉽게 해줌
- 자체 스토리지 이외에도 클라우드 스토리지를 외부 테이블로 사용 가능
- 특징 2 :
- 멀티클라우드와 다른 지역에 있는 데이터 공유(Cross-Region Replication) 기능 지원
- 계정 구성도 : Organization → 1 + Account → 1 + Databases
- 특징 3 :
- Organizations : 한 고객이 사용하는 모든 Snowflake 자원들을 통합하는 최상위 레벨 컨테이너
- Accounts : 하나 혹은 그 이상의 데이터베이스로 구성
- Databases : 한 어카운트에 속한 데이터를 다루는 논리적인 컨테이너. 한 데이터베이스는 다수의 스키마와 거기에 속한 테이블과 뷰 등으로 구성.웨어하우스와 데이터베이스는 일대일 관계가 아님
- 특징 4 :
- Data Marketplace : 데이터 메시가 생기기 전부터 데이터 마켓플레이스라는 서비스 제공
- Data Sharing(”Share, Don’t Move) : 데이터 셋을 사내 혹은 파트너에게 스토리지 레벨에서 공유
Snowflake 실습
- 30일 free trial을 위해 회원가입을 해준다
- 이메일로 activation 링크를 받아 접속하면 이런 모습이다.
- Worksheets는 파이썬으로 치면 노트북 같은 것
- 우측 상단에 이름을 누르면 권한을 바꿀 수 있는데 ACCOUNTADMIN으로 선택

- 우선 좌측 메뉴바에 Data → Warehouse에 들어가서 새로운 웨어하우스를 생성한다
- 사이즈는 X-small로 해야한다 (제일 비용이 적게 드는 크기이기 때문!)
- 생성 후에 새로운 데이터베이스를 생성해야 하는데, worksheets로 돌아가서 새로운 시트를 생성한다(SQL을 선택)
- 그러면 sql 에디터가 열린다. 이제 이 곳에서 코드를 작성하여 쿼리를 실행시키면 된다.
- 우측 상단에 만들어둔 웨어하우스를 연결한다

- dev라는 데이터베이스를 생성하고, 그 안에 3 개의 스키마를 생성한다 (raw_data, analytics, adhoc)
- 실행을 할 때는 실행하고 싶은 라인들은 하이라이트한 후 우측 상단에 파란색 재생 버튼 클릭
- 그리고 raw_data 스키마 아래에 3개의 테이블을 생성한다(user_session_channel, session_timestamp, session_transaction)
Snowflake의 COPY 명령
- 레코드를 하나씩 적재하지 않고 벌크로 레코드들이 있는 파일을 통째로 적재하는 방식
- 먼저 S3와 같은 클라우드 스토리지에 업로드
- 스토리지에 있는 파일들을 COPY 명령으로 목적 테이블에 벌크로 적재
- 이 방식은 클라우드 스토리지와 접근 권한 설정이 중요함
- 이번에 사용할 클라우드 스토리지 : S3
- 권한 설정 : IAM
AWS S3 버킷 생성과 파일 업로드
- 먼저 업로드할 파일들을 컴퓨터에 다운 받아준 후, S3 버킷을 생성한다
- 버킷은 AWS 계정 생성 후 만들 수 있다.

- 버킷 이름은 원하는 대로 짓고 나머지 옵션은 디폴트로 아무것도 바꾸지 않는다.
- 버킷 생성 후에는 test_data라는 폴더를 만들고 이 안에 4개의 csv 파일들을 업로드할 것이다.

- upload 버튼을 누르고 데이터 파일을 드래그하면 업로드가 된다

- 이제 클라우드 스토리지에 데이터 파일들이 적재가 됐다.
- 이걸 사용하려면 권한 설정을 새로 해주어야 한다
IAM 생성
- AWS console에 IAM을 검색하여 들어간다
- 좌측 메뉴바에 Users에 들어가면 Create user 버튼이 있는데 이걸로 새로운 유저를 생성한다

- 유저를 새로 생성할 때 S3 read라는 policy를 선택하고 생성을 완료하면 위의 모습처럼 유저 목록에 유저가 나타난다.
- 유저를 클릭하면 유저의 정보가 나오는데 COPY 명령을 실행하려면 필요한 것이 AWS Access Key와 secret key이다.
- 이건 유저 정보 페이지에서 Security credentials를 누르면 볼 수 있다.

- 아래로 스크롤하면 Access Keys라는 토글이 나오는데 그곳에 Create access key를 눌러 키 생성을 하면 된다
- 그러면 키가 2개가 나오는데 그것이 각각 액세스 키와 시크릿키다.
- 그걸 복사하여 다시 Snowflake로 넘어가자.
COPY 명령으로 데이터 적재하기
- 카피 명령은 다음과 같다 :
COPY INTO dev.raw_data.session_timestamp
FROM 's3://버킷 이름/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_KEY_ID에 액세스 키를 복사해서 넣고, AWS_SECRET_KEY에 시크릿 키를 복사해서 넣자
- 그리고 FROM 절에는 나의 S3 버킷 링크를 복사해서 넣는다.
- 해당 명령어를 session_timestamp, session_transaction, user_session_channel에 한번씩 실행성공적으로 데이터가 벌크로 적재된다.

확인
- CTAS로 잘 적재되었는지 확인

ROLE과 User 생성
- Snowflake는 Group을 지원하지 않는다
- role과 user를 생성하여 레벨 별 접근 권한을 설정할 수 있다
- 유저의 비밀번호까지 설정할 수 있다

컬럼 레벨 보안(Column Level Security)
- 테이블 내의 특정 컬럼을 특정 사용자나 특정 역할에만 접근 가능하게 하는 것
- 보통 개인정보 등에 해당하는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용됨
- 가장 좋은 방법은 아예 그런 컬럼을 별도 테이블에 구성하는 것임
- 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것
레코드 레벨 보안(Row Level Security)
- 테이블 내의 특정 레코드를 특정 사용자나 특정 역할에만 접근 가능하게 하는 것
- 특정 사용자 / 그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 다는 형태로 동작
- 일반적으로 더 좋은 방법은 아예 별도의 테이블로 관리하는 것
- 마찬가지로 아예 데이터 시스템으로 로딩하지 않는 것이 더 좋음
Data Governance 관련 기능
- Object Tagging
- Data Classification
- Tag based Masking Policies
- Access History
- Object Dependencies
Data Governance란?
- 필요한 데이터가 적재적소에 올바르게 사용됨을 보장하기 위한 데이터 관리 프로세스
- 다음을 이룩하기 위함이 기본 목적 :
- 데이터 기반 결정에서 일관성
- 데이터를 이용한 가치 만들기
- 데이터 관련 법규 준수
1. Object Tagging
- Enterprise 레벨에서만 가능한 기능. CREATE TAG로 생성
- 문자열을 snowflake object에 지정 가능
- 이렇게 지정된 tag는 구조를 따라 계승
2. Data Classification
- Enterprise 레벨에서만 가능
- 개인 정보 관리를 매뉴얼하게 관리하기가 어려워 나온 기능
- 3가지 스텝으로 구성 :
- Analyze : 테이블에 적용하면 개인 정보나 민감 정보가 있는 컬럼을 분류
- Review : 이를 사람(보통 데이터 엔지니어)이 보고 최종 리뷰 (결과 수정도 가능)
- Apply : 최종 결과를 System Tag로 적용
3. Tag based Masking Policies
- Enterprise 레벨에서만 가능
- 먼저 Tag에 액세스 권한을 가짐
- 해당 태그가 지정된 Snowflake object의 액세스 권한을 그에 맞춰 제한하는 방식
- 개인정보와 같은 태그에 부여하는 것이 가장 많이 사용되는 패턴
4. Access History
- Enterprise 레벨에서만 가능한 기능
- 목적은 데이터 액세스에 대한 감사 추적을 제공하여 보안과 규정 준수
- 잠재적인 보안 위반이라 무다 ㄴ액세스 시도의 조사를 가능하게 함
- 액세스 히스토리를 통해 다음 활동의 추적이 가능
- 데이터베이스 로그인, 실행된 쿼리, 테이블 및 뷰 액세스, 데이터 조작 작업
5. Object Dependencies
- 데이터 거버넌스와 시스템 무결성 유지가 목적
- 테이블이나 뷰를 수정하는 경우 이로 인한 영향을 자동으로 식별
- 계승 관계 분석을 통한 더 세밀한 보안 및 액세스 제어
'Data Science > TIL (Today I Learned)' 카테고리의 다른 글
| 프로그래머스 데이터분석 데브코스 1기 - 44일차 (1) | 2024.01.25 |
|---|---|
| 프로그래머스 데이터분석 데브코스 1기 - 43일차 (0) | 2024.01.24 |
| 프로그래머스 데이터분석 데브코스 1기 - 41일차 (0) | 2024.01.22 |
| 프로그래머스 데이터분석 데브코스 1기 - 40일차 (0) | 2024.01.19 |
| 프로그래머스 데이터분석 데브코스 1기 - 39일차 (0) | 2024.01.18 |