강의
Redshift
Redshift 특징
- 최소 160GB부터 최대 2PB 용량 처리 가능
- OLAP : 응답속도 느림 → 프로덕션 데이터베이스 사용 불가
- 컬럼 기반 스토리지 : 컬럼별 압축 가능 및 컬럼 추가/삭제 용이
- 벌크 업데이트 지원 : S3로 파일 복사 → COPY로 Redshift에 일괄 복사
- 고정 용량/비용 옵션 및 가변 비용 옵션 제공
- 데이터 공유(Datashare) 가능
- Primary key 유일성 보장 불가
- Postgresql 8.x 및 SQL 호환
Redshift 스케일링 방식
"Resizing"은 용량이 부족해질 때마다 새로운 노드를 추가하는 스케일링 방식입니다.
Auto Scaling 옵션으로 설정하여 자동 실행할 수 있습니다.
Redshift의 가변비용 옵션으로 Redshift Serverless를 사용하여 Snowflake, BigQuery의 방식을 사용할 수 있습니다.
- Scale Out : 용량이 부족하면 장치 추가
- Scale Up : 용량이 부족하면 사양 업그레이드
Redshift 레코드 분배 및 저장 방식
Redshift는 최적화가 매우 복잡합니다.
다수의 노드로 구성된 Redshift는 레코드를 분산 저장해야 합니다.
- Diststyle : 레코드 분배 방법
- all
- even(default)
- key
- Distkey : Diststyle이 key인 경우, 기준 컬럼 설정
- Sortkey : 정렬 기준 컬럼 설정
- 타임스탬프 필드(default)
CREAT TABLE table_name(
column1 INT,
column2 TIMESTAMP,
...
) DISTSTYLE KEY DISTKEY(column1) SORTKEY(column2)
;
Redshift 데이터 타입
- 기본
- SMALLINT (INT2)
- INTEGER (INT, INT4)
- BIGINT (INT8)
- DECIMAL (NUMERIC)
- REAL (FLOAT4)
- DOUBLE RECISION (FLOAT8)
- BOOLEAN (BOOL)
- CHAR (CHARACTER)
- VARCHAR (CHARACTER VARYING)
- TEXT (VARCHAR(256))
- DATE
- TIMESTAMP
- 고급
- GEOMETRY
- GEOGRAPHY
- HLLSKETCH
- SUPER
Redshift 설치
COLAP에서 실행하기
%load_ext sql
!pip install ipython-sql==0.4.1
!pip install SQLAlchemy==1.4.49
%sql postgresql://admin:***@default-workgroup.986431558097.us-west-2.redshift-serverless.amazonaws.com:5439/dev
Redshift 초기 설정
Schema
"Schema"는 카테고리별 테이블 관리를 위한 폴더 입니다.
- raw_data : ETL 결과
- analytics : ELT 결과
- adhoc : 테스트용 테이블
- pii : 개인정보
# 사용자 생성하기
CREATE USER yen PASSWORD ***;
# 사용자 리스트
SELECT * FROM pg_user;
# 스키마 생성하기
CREATE SCHEMA raw_data;
CREATE SCHEMA analytics;
CREATE SCHEMA adhoc;
CREATE SCHEMA pii;
# 스키마 리스트
SELECT * FROM pg_namespace;
그룹(Group)
"그룹"은 계승이 불가능하기 때문에 사용자 그룹별로 액세스 권한을 설정하는 것이 좋습니다.
- analytics_users : 데이터 활용 개인
- analytics_authors : 데이터 분석가
- pii_users : 어드민
# 그룹 생성하기
CREATE GROUP analytics_users;
CREATE GROUP analytics_authors;
CREATE GROUP pii_users;
# 그룹에 사용자 추가하기
ALTER GROUP analytics_users ADD USER yen;
ALTER GROUP analytics_authors ADD USER yen;
ALTER GROUP pii_users ADD USER yen;
# 그룹 리스트
SELECT * FROM pg_group;
역할(Role)
"역할"은 계승이 가능하고 한 사용자가 다수의 역할에 소속될 수 있습니다.
# 역할 생성하기
CREATE ROLE staff;
CREATE ROLE manager;
CREATE ROLE external;
# 역할 부여하기
GRANT ROLE staff TO yen;
GRANT ROLE staff TO ROLE manager;
# 역할 리스트
SELECT * FROM SVV_ROLES;
벌크 업데이트
벌크 업데이트는 Redshift에서 기본적으로 사용하는 레코드 업데이트 방식 입니다.
Snowflake, BigQuery에서도 사용할 수 있습니다.
Redshift 벌크 업데이트
- S3에 CSV 파일 복사 : S3 웹콘솔
- raw_data 스키마 밑에 CREATE TABLE 이용하여 테이블 생성
- S3 접근 권한 가능한 역할 생성 : IAM 웹콘솔
- Redshift 클러스터에 역할 저장 : Redshift 웹콘솔
# 에러 확인하기
SELECT * FROM stl_load_errors ORDER BY starttime DESC;
SELECT * FROM sys_load_error_detail;
# 테이블 생성
CREATE TABLE raw_data.user_session_channel(
userid integer,
sessionid varchar(32) primary key,
channel varchar(32)
);
CREATE TABLE raw_data.session_timestamp(
sessionid varchar(32) primary key,
ts timestamp
);
CREATE TABLE raw_data.session_transaction(
sessionid varchar(32) primary key,
refunded boolean,
amount int
);
# CSV 파일을 테이블로 복사하기
COPY raw_data.user_session_channel
FROM 's3://yeeen-test-bucket/test_data/user_session_channel.csv'
credentials 'aws_iam_role=arn:aws:iam::986431558097:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
COPY raw_data.session_timestamp
FROM 's3://yeeen-test-bucket/test_data/session_timestamp.csv'
credentials 'aws_iam_role=arn:aws:iam::986431558097:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
COPY raw_data.session_transaction
FROM 's3://yeeen-test-bucket/test_data/session_transaction.csv'
credentials 'aws_iam_role=arn:aws:iam::986431558097:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
# analytics 스키마에 테이블 생성하기(ELT)
CREATE TABLE analytics.mau_summary AS
SELECT
TO_CHAR(TS.ts, 'YYYY-MM') AS month,
COUNT(DISTINCT MAIN.userid) AS mau
FROM raw_data.session_timestamp AS TS
JOIN raw_data.user_session_channel AS MAIN
ON TS.sessionid = MAIN.sessionid
GROUP BY 1
ORDER BY 1 DESC
;
'데브코스 TIL > AWS 클라우드' 카테고리의 다른 글
AWS Glue (1) | 2023.11.29 |
---|---|
Redshift 고급 기능 (1) | 2023.11.29 |
AWS Part 13 Devops (0) | 2023.11.24 |
AWS Part 12 CloudWatch (0) | 2023.11.24 |
AWS Part 11 Serverless (0) | 2023.11.24 |