홍카나의 공부방

[DE 데브코스] 05.25 TIL - Redshift 심화, Fact/Dimension/외부테이블과 View 차이점 등 본문

Data Engineering/프로그래머스 데브코스

[DE 데브코스] 05.25 TIL - Redshift 심화, Fact/Dimension/외부테이블과 View 차이점 등

홍문관카페나무 2023. 5. 25. 16:06

Redshift 권한과 보안

  • 일반적으로 사용자별 테이블 권한 설정은 하지 않는다. 복잡하고, 실수의 가능성이 높기 때문이다.
  • 역할(Role) 혹은 그룹(Group) 별로 스키마 접근 권한을 주는 것이 일반적이다.
  • Role은 계승 구조를 지원하고, Group은 그렇지 않기 때문에 역할 기반 관리가 새로운 트렌드가 된다.
  • 아래와 같은 구조로 그룹(역할)별 권한을 설정할 수 있다.
스키마, 그룹(역할) analytics_authors analytics_users pii_users admin
raw_data 테이블들 읽기 읽기 X 읽기, 쓰기
analytics 테이블들 읽기, 쓰기 읽기 X 읽기, 쓰기
adhoc 테이블들 읽기, 쓰기 읽기, 쓰기 X 읽기, 쓰기
pii 테이블들 X X 읽기 읽기, 쓰기

 

  • 사용자는 여러 개의 그룹 혹은 역할에 할당될 수 있다.
  • GRANT 명령어를 써서 스키마에 대한 권한을 부여할 수 있다.
  • GRANT ALL : 스키마에 대한 모든 권한 부여.
  • GRANT USAGE : 스키마에 대한 엑세스 권한만 부여. ( 보통 SELECT용 )
-- GRANT 문장 구조
GRANT [권한] ON [객체] TO [사용자, 그룹, ...] 

-- analytics 스키마에 대한 모든 권한을 부여 
GRANT ALL ON SCHEMA analytics TO GROUP analytics_authors;

-- anaytics 스키마의 모든 테이블에 대한 모든 권한을 부여
GRANT ALL ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_authors;
  • 컬럼 별, 레코드 별로 접근과 관련한 보안을 설정할 수도 있다. (하지만 좋은 것은 테이블 별로 주는 것이라고 하셨다.)

 

Redshift Backup

  • 고정비용 Redshift에서는 자동 백업과 매뉴얼 백업을 지원한다.
  • 기본적으로 백업 방식은 마지막 백업으로부터 바뀐 것들만 저장하는 incremental(증분) 방식이다. 이를 Snapshot이라고 부른다.
  • 백업을 통해 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구하는 것이 가능하고, Redshift 클러스터를 새로 생성하는 것도 가능하다.
  • 스냅샷 보존 기간은 기본 1일에서 35일까지 늘릴 수 있다.
  • Redshift serverless는 고정비용에 비해 제한적이다. serverless는 24시간 동안만 백업이 유지된다.
  • snapshot이라 하지 않고, recovery points라고 한다.

 

Fact 테이블 vs. Dimension 테이블

  • Fact 테이블은 여러 양적 정보를 포함하는 중앙 테이블이다. Sales, revenue와 같은 사실/측정 항목을 포함하며 비즈니스 결정에 사용된다.
  • Dimension 테이블은 Fact 테이블에 대한 상세 정보를 제공하는 테이블이다. 고객, 제품과 같은 테이블로 Fact 테이블에 대한 상세 정보를 제공한다.
  • Fact 테이블에 context를 제공하여 다양한 방식으로 데이터 분석을 가능하게 해 준다.
  • Fact 테이블의 크기가 훨씬 더 크다.
  • 주문 정보가 담긴 Order 테이블, Order 테이블에 사용된 상품 정보와 구매한 유저의 정보가 담긴 Product, User 테이블의 관계가 Fact, Dimension 관계의 예시다.

 

External Table vs. View

  • 외부 테이블(External Table)은 DB 엔진이 외부에 저장된 데이터를 마치 내부 테이블처럼 사용하는 방법이다.
  • 외부 테이블을 사용하여 데이터를 처리 후, 그 결과를 DB에 적재할 수 있다.
  • S3 외부 테이블들은 보통 Fact 테이블이 되고, Redshift 테이블은 Dimension 테이블이 된다.
  • 나는 이를 View와 헷갈렸는데, 외부 테이블과 뷰는 모두 Virtual한 테이블이지만 여러 차이점이 있다.
  • 뷰는 데이터를 조회하는 데 사용되고, 외부 테이블은 데이터를 삽입, 업데이트, 삭제하는 데 사용된다.
  • 뷰는 물리적 테이블에서 데이터를 가져오는 반면, 외부 테이블은 S3와 같은 외부 스토리지에서 데이터를 가져온다.
  • 뷰는 물리적 테이블이 아니므로 데이터 삽입, 업데이트, 삭제가 불가능하다. 반면 외부 테이블은 이러한 데이터 처리가 가능하다.
  • 외부 테이블은 데이터베이스 사용자라면 생성할 수 있다.
  • 다음 SQL을 실행하여 외부 테이블용 스키마를 Redshift에 생성할 수 있다.
CREATE EXTERNAL SCHEMA external_schema
from data catalog
database '{db이름}'
iam_role 'arn:aws:iam::{account_id}:role/{역할_이름}'
create external database if not exists;

-- 역할에 AWSGlueConsoleFullAccess 권한 지정 필요!

 

Redshift 중지/제거

  • 고정 비용 옵션에만 중지, 제거가 있다. 가변 비용(serverless)에는 그런 거 없다.
  • Redshift는 주기적으로 버전 업그레이드를 위해 중단된다. (Maintenance Window)
  • Redshift 테이블에 데이터가 삽입, 업데이트 또는 삭제될 때 데이터가 불규칙하게 분산되어 저장될 수있다.
  • 이때 VACUUM 명령어가 데이터를 정렬하고, 남아있는 행을 모아 쿼리 실행 시 연산 비용을 절감시켜 준다.
  • Redshift가 당분간 필요 없다면, 콘솔에서 STOP을 해준다. 이 경우 Redshift 클러스터의 스토리지 비용만 부담하고, 당연히 SQL 실행은 불가능하다.
  • 아예 필요 없다면 Delete 하면 되는데, 백업용 스냅샷을 S3에 저장할지 선택할 수 있다.
  • 가변 비용(serverless) : Workgroup 삭제 -> Namespace 삭제

 

오늘 공부하며 어려웠던 내용

  • 진도가 조금 밀렸는데, 주말을 이용해서 추가 학습을 진행해야겠다.

 

반응형