DISTKEY는 데이터를 Redshift의 슬라이스(Slice)에 어떻게 분배할지를 결정하는 키.
Redshift는 해시 기반 분배(hash distribution)를 사용.
CREATE TABLE fact_sales (
user_id BIGINT DISTKEY,
product_id BIGINT,
price INT
);
CREATE TABLE user_profile (
user_id BIGINT DISTKEY,
product_id BIGINT,
price INT
);
SELECT s.user_id, s.price, u.age
FROM fact_sales s
JOIN user_profile u
ON s.user_id = u.user_id;
fact_sales.user_id = 123
→ 슬라이스 3번user_profile.user_id = 123
→ 슬라이스 3번user_id
는 서로 다른 테이블이라도 같은 슬라이스에 저장됨.EVEN
(라운드 로빈) 또는 ALL
(작은 테이블 전체 복제) 전략 사용.노드(Node): 클러스터를 구성하는 서버 단위.
슬라이스(Slice): 노드 내부의 데이터 분배/처리 단위.
ra3.4xlarge
→ 노드당 12 슬라이스, ds2.xlarge
→ 노드당 2 슬라이스.CREATE TABLE fact_sales (
user_id BIGINT,
order_date DATE,
amount BIGINT
)
DISTKEY(user_id)
SORTKEY(order_date);
DISTKEY(user_id)
→ 동일한 user_id는 같은 슬라이스에 저장.SORTKEY(order_date)
→ 각 슬라이스 내부에서 order_date 기준으로 정렬.범위 검색 최적화
BETWEEN
, <
, >
조건에서 필요한 블록만 스캔.조인 최적화
압축 효율성 증가
VACUUM
필요.👉 DISTKEY는 데이터 분산 효율성, SORTKEY는 쿼리 효율성을 위한 키이다.