주제

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 버튼이 있는데 이걸로 새로운 유저를 생성한다

IAM 유저 생성

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

파란색 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로 잘 적재되었는지 확인

데이터가 잘 적재되어 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

  • 데이터 거버넌스와 시스템 무결성 유지가 목적
  • 테이블이나 뷰를 수정하는 경우 이로 인한 영향을 자동으로 식별
  • 계승 관계 분석을 통한 더 세밀한 보안 및 액세스 제어

+ Recent posts