230303 일
Redshift
특징
- AWS
- 2PB
- OLAP
- 응답속도가 빠르지 않기 때문에 프로덕션 DB로 사용 불가
- 컬럼 기반 스토리지
- 레코드별로 저장하는 것이 아니라 컬럼별로 저장함
- 컬럼별 압축이 가능하며, 컬럼을 추가하거나 삭제하는 것이 아주 빠름
- 벌크 업데이트 지원
- 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사
- 고정/가변 비용 SQL 엔진
- Datashare 기능
- 다른 AWS 계정과 특정 데이터 공유 가능 (Snowflake를 따라 함)
- 다른 DW들과 동일하게 primary key uniqueness 보장 x
- Postgesql 8.x과 호환
- 하지만 완전 호환은 아님 (예를 들어 text 타입이 존재하지 않음)
스케일링 방식
- 용량이 부족해질 때마다 새로운 노드를 추가하는 방식으로 스케일링
- Scale Out, Scale Up
- Auto Scaling
- Snowflake나 BigQuery는 특별히 용량이 정해져 있지 않음 (비용 예측 불가능)
벌크 업데이트 방식 - COPY SQL
- 소스로부터 데이터 추출
- S3에 업로드 (보통 Parquet 포맷을 선호)
- COPY SQL로 S3에서 Redshift 테이블로 한 번에 복사
기본 데이터 타입
- SMALLINT (INT2)
- INTEGER (INT, INT4)
- BIGINT (INT8)
- DECIMAL (NUMERIC)
- REAL (FLOAT4)
- DOUBLE PRECISION (FLOAT8)
- BOOLEAN (BOOL)
- CHAR (CHARACTER)
- VARCHAR (CHARACTER VARYING)
- TEXT (VARCHAR(256))
- DATE
- TIMESTAMP
고급 데이터 타입
- GEOMETRY
- GEOGRAPHY
- HLLSKETCH
- SUPER
그룹(Group)과 역할(Role)
그룹
- 한 사용자는 다수의 그룹에 속할 수 있음
- 그룹은 계승이 안 됨 → 그룹 관리 힘들어짐
- 모든 그룹 리스트 select * from pg_group;
역할
- 계승 구조 가능
- 역할은 사용자에게 부여될 수도, 다른 역할에 부여될 수도 있음
- 한 사용자는 다수의 역할에 소속 가능
- 모든 역할 리스트 select * from SVV_ROLES;
벌크 업데이트 - COPY command
COPY raw_data.user_session_channel
FROM 's3://seungeon-test-bucket/test_data/user_session_channel.csv'
**credentials 'aws_iam_role=arn:aws:iam:xxxxxxx:role/redshift.read.s3'**
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
권한과 보안
- 일반적으로 사용자별로 테이블별 권한 설정을 하지는 않음 → 너무 복잡하고 실수의 가능성 높음
- Role이나 Group 별로 스키마별 접근 권한을 주는 것이 일반적
- RBAC(Role Based Access Control)가 트렌드 ⇒ 그룹보다 편리
- 여러 역할에 속한 사용자는 각 역할의 권한을 모두 가짐 (Inclusive)
- 개인 정보와 관련한 테이블이라면 별도 스키마 설정
- 극히 일부 사람만 속한 역할에 접근 권한 부여
- 컬럼 레벨 보안 (Column Level Security)
- 테이블 내의 특정 컬럼들을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
- 보통 개인정보 등에 해당하는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용
- 가장 좋은 방법은 개인정보 관련 컬럼을 별도 테이블로 구성하는 것
- 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것
- 레코드 레벨 보안 (Row Level Security)
- 테이블 내의 특정 레코드들을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
- 특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 다는 형태로 동작
- RLS (Record Level Security) Policy라 부름
- CREATE RLS POLICY, ATTACH RLS POLICY
- 가장 좋은 방법은 개인정보 관련 컬럼을 별도 테이블로 구성하는 것
- 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것
백업
- 마지막 백업으로부터 바뀐 것들만 저장하는 방식 (Snapshot)
- 백업을 통해 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구하는 것이 가능 (Table Restore)
- 과거 시점의 내용으로 Redshift 클러스터를 새로 생성하는 것도 가능
- 자동백업
- 기본은 하루, 최대 과거 35일까지의 변경 백업 가능
- 같은 지역에 있는 S3에 백업 이루어짐
- 다른 지역의 S3에 하려면 Cross-regional snapshot copy를 설정해야 함(보통 재난시 데이터 복구)
- 메뉴얼 백업
기타 관련 서비스
- Redshift Spectrum
- 확장 기능
- S3 등에 있는 파일들을 테이블처럼 사용 가능하게 해 줌 (1TB 스캔 당 $5 비용)
- Redshift Serverless
- Athena
- Apache Presto를 서비스화한 것 (Redshift Spectrum과 비슷한 기능 제공)
- Redshift ML
- SQL 만 사용하여 머신러닝 모델을 훈련하고 사용할 수 있게 해주는 기능
- AWS SageMaker(MLOps 프레임워크)에 의해 지원됨
'[프로그래머스] 데이터엔지니어링 데브코스 1기 > TIL (Today I Learned)' 카테고리의 다른 글
TIL_day31 ETL/ELT (1) | 2024.03.03 |
---|---|
TIL_day28 AWS IAM, S3, CodePipeline (0) | 2024.02.17 |
TIL_day27 AWS RDS, Dynamo DB, Route53, ELB, VPC (0) | 2024.02.14 |
TIL_day25 Transaction (1) | 2024.01.31 |
TIL_day10 Seaborn, Wordcloud (0) | 2024.01.25 |