The world's most valuable resource is no longer oil, but data
AWS DW, Data Lake, DB 를 통합하여 분석
일반적인 DW 대비 최대 3배 성능 보장
필요한 만큼만 On-demand, RI (기간을 정해 데이터를 미리 예약하여 사용)로 선택 시 최대 75% 절감
Adaptive concurrency
Smarter preemption
Imporoved ML prediction model
Turbo-boost mode/ SQA(Short Query Acceleration)
예상치 못한 요청 증가에도 유연하게 동시성 확장 가능
대기 상태 쿼리가 Compute 자원이 필요할 경우 단 시간 (몇 초 이내)에 다중 클러스터로 확장
-> 단일 클러스터 DW뿐만 아니라 데이터 Silo를 제거하여 폭넓은 데이터 활용 가능
클라우드에 최적화된 MPP(대용량 병렬 처리) 기반 DW, Columnar 기반 OLAP DB
Leader 노드
Compute 노드 | Slice
클러스터 = Leader 노드 + Compute 노드
쿼리 실행 시간을 단축을 위한 쿼리 결과 메모리 캐싱
장기 쿼리로 인한 체감 성능 저하 완화 및 동시성 확보
S3 데이터를 테이블에 적재하지 않고도 정형 및 비정형 데이터를 효율적으로 쿼리
Amazon redshift ML
SQL을 활용한 머신러닝 모델 생성 및 학습
반정형 데이터 지원
DATA API 사용
자동 테이블 최적화 작업
인공지능 기반 테이블 디자인을 자동으로 최적
SELECT * FROM pg_user
DROP TABLE IF EXISTS partsupp;
DROP TABLE IF EXISTS lineitem;
DROP TABLE IF EXISTS supplier;
DROP TABLE IF EXISTS part;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS customer;
DROP TABLE IF EXISTS nation;
DROP TABLE IF EXISTS region;
CREATE TABLE region (
R_REGIONKEY bigint NOT NULL,
R_NAME varchar(25),
R_COMMENT varchar(152))
diststyle all;
CREATE TABLE nation(
N_NATIONKEY bigint NOT NULL,
N_NAME varchar(25),
N_REGIONKEY bigint,
N_COMMENT varchar(152))
diststyle all;
CREATE TABLE customer(
C_CUSTKEY bigint NOT NULL,
C_NAME varchar(25),
C_ADDRESS varchar(40),
C_NATIONKEY bigint,
C_PHONE varchar(15),
C_ACCTBAL decimal(18,4),
C_MKTSEGMENT varchar(10),
C_COMMENT varchar(117))
diststyle all;
CREATE TABLE orders(
O_ORDERKEY bigint NOT NULL,
O_CUSTKEY bigint,
o_ORDERSTATUS varchar(1),
O_TOTALPRICE decimal(18, 4),
O_ORDERDATE Date,
O_ORDERPRIORITY varchar(15),
O_CLERK varchar(15),
O_SHIPPIORITY Integer,
O_COMMENT varchar(79))
distkey (O_ORDERKEY)
sortkey (O_ORDERDATE);
CREATE TABLE part (
P_PARTKEY bigint NOT NULL,
P_NAME varchar(55),
P_MFGR varchar(25),
P_BRAND varchar(10),
P_TYPE varchar(25),
P_SIZE integer,
P_CONTAINER varchar(10),
P_RETAILPRICE decimal(18, 4),
P_COMMENT varchar(23))
diststyle all;
CREATE TABLE lineitem(
L_ORDERKEY bigint NOT NULL,
L_PARTKEY bigint,
L_SUPPKEY bigint,
L_LINENUMBER integer NOT NULL,
L_QUANTITY decimal(18,4),
L_EXTENDERPRICE decimal(18,4),
L_DISCOUNT decimal(18,4),
L_TAX decimal(18,4),
L_RETURNFLAG varchar(1),
L_LINESTATUS varchar(1),
L_SHIPDATE date,
L_COMMITDATE date,
L_RECEIPDATE date,
L_SHIPINSTRUCT varchar(25),
L_SHIPMODE varchar(10),
L_COMMENT varchar(44))
distkey (L_ORDERKEY)
sortkey (L_RECEIPDATE);
CREATE TABLE supplier(
S_SUPPKEY bigint NOT NULL,
S_NAME varchar(25),
S_ADDRESS varchar(40),
S_NATIONKEY bigint,
S_PHONE varchar(15),
S_ACCTBAL decimal(18, 4),
S_COMMENT varchar(101))
diststyle all;
CREATE TABLE partsupp(
PS_PARTKEY bigint NOT NULL,
PS_SUPPKEY bigint NOT NULL,
PS_AVAILQTY integer,
PS_SUPLLYCOST decimal(18,4),
PS_COMMENT varchar(199))
diststyle even;
diststyle all -> 모든 데이터를 모든 클러스터에 생성
diststyle even -> 데이터를 나누어서 클러스터에 생성
distkey -> 동일 키는 동일한 위치에 저장 시킴
적절한 분산키의 선택
Fact Table / Dimension Table
Fact Table
정량적인 실제값들이 들어오는 테이블
여러 테이블들의 primary keys를 가지고 있는 테이블이라고 생각해도 됨
star schema에서 가운데 테이블
Dimension Table
Fact Table은 Even으로 Dimension Table 은 ALl 로 구성하면 network를 타는 경우를 줄일 수 있
정렬 키
정렬 키가 지정된 테이블의 경우 데이터 로드시 정렬 순서대로 디스크에 저장
정렬키의 종류
정렬 키 : 테이블의 단일 컬럼의 값을 기준으로 데이터를 정렬하여 저장
복합 정렬키 (Compund Sort Key):
인터리브 정렬키 (Interleaved Sort Key)
선택적 필터링
정렬 키를 활용할 경우 쿼리 속도가 빨라짐 (ZONE MAP)
COPY region FROM 's3://redshift-immersionday-labs/data/region/region.tbl.lzo'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY nation FROM 's3://redshift-immersionday-labs/data/nation/nation.tbl.'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY customer FROM 's3://redshift-immersionday-labs/data/customer/customer.tbl.'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY orders FROM 's3://redshift-immersionday-labs/data/orders/orders.tbl.'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY part FROM 's3://redshift-immersionday-labs/data/part/part.tbl.'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY supplier FROM 's3://redshift-immersionday-labs/data/supplier/supplier.json' manifest
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
COPY lineitem FROM 's3://redshift-immersionday-labs/data/lineitem-part/'
iam_role default
region 'us-west-2' gzip delimiter '|' COMPUPDATE PRESET;
COPY partsupp FROM 's3://redshift-immersionday-labs/data/partsupp/partsupp.tbl.'
iam_role default
region 'us-west-2' lzop delimiter '|' COMPUPDATE PRESET;
쿼리플래너(옵티마이저)가 최적의 실행 계획을 작성할 수 있도록 정기적으로 통계 메타데이터를 업데이트 해야
analyze table;
삭제 및 수정이 빈번하게 발생했을 경우 VACUUM
디스크 조각 모음과 비슷
ex)
ORDERS 테이블의 초기 적재 상태 확인
select col, count(*)
from stv_blocklist, stv_tbl_perm
where stv_blocklist.tbl = stv_tbl_perm.id and
stv_blocklist.slice = stv_tbl_perm.slic and
stv_tbl_perm.name = 'orders' and
col <= 5
group by col
order by col;
일부 행 삭제
delete orders where o_orderdate between '1997-01-01' and '1998-01-01';
삭제 전과 후가 동일
vacuum 명령어 실행
vacuum delete only orders;
https://tkwon.tistory.com/4
https://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/working-with-clusters.html
https://pearlluck.tistory.com/27
https://hyunki1019.tistory.com/149
https://www.youtube.com/watch?v=w3-P6s97ZsE&t=2s
https://www.youtube.com/watch?v=i_l8ZxRuL0k&t=4s