Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Docker
- Go
- 컴퓨터네트워크
- TIL
- 데브코스
- 데이터엔지니어링
- 데이터베이스
- 데이터 파이프라인
- AWS
- 종류
- TCP
- 데이터 웨어하우스
- PYTHON
- dockerfile
- redshift
- airflow
- Django
- sql
- 컴퓨터 네트워크
- 가상환경
- 자료구조
- HADOOP
- 데이터 엔지니어링
- linux
- airflow.cfg
- 운영체제
- 정리
- 파이썬
- S3
- http
Archives
- Today
- Total
홍카나의 공부방
[DE 데브코스] 05.25 TIL - Redshift 심화, Fact/Dimension/외부테이블과 View 차이점 등 본문
Data Engineering/프로그래머스 데브코스
[DE 데브코스] 05.25 TIL - Redshift 심화, Fact/Dimension/외부테이블과 View 차이점 등
홍문관카페나무 2023. 5. 25. 16:06Redshift 권한과 보안
- 일반적으로 사용자별 테이블 권한 설정은 하지 않는다. 복잡하고, 실수의 가능성이 높기 때문이다.
- 역할(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 삭제
오늘 공부하며 어려웠던 내용
- 진도가 조금 밀렸는데, 주말을 이용해서 추가 학습을 진행해야겠다.
반응형
'Data Engineering > 프로그래머스 데브코스' 카테고리의 다른 글
[DE 데브코스] 06.05 TIL - Airflow 예제 (0) | 2023.06.06 |
---|---|
[DE 데브코스] 06.04 TIL - 트랜잭션과 Airflow 설치 (0) | 2023.06.04 |
[DE 데브코스] 05.23 TIL - Redshift, Serverless, ELT 예시 (0) | 2023.05.24 |
[DE 데브코스] 05.22 TIL - 데이터 팀에 대하여, DevOps 등 (0) | 2023.05.22 |
[DE 데브코스] 05.19 TIL - Lambda, Docker (0) | 2023.05.19 |