
AWS / Azure / GCP
Amazon RedshiftAmazon Redshift
Amazon Redshift는 AWS의 완전 관리형 페타바이트 규모 데이터 웨어하우스로, 컬럼 기반 스토리지와 대규모 병렬 처리(MPP)로 분석 쿼리를 고속 실행한다.
Redshift 아키텍처
리더 노드 (쿼리 계획, 집계)
├── 컴퓨팅 노드 1 (슬라이스 1, 2)
├── 컴퓨팅 노드 2 (슬라이스 3, 4)
└── 컴퓨팅 노드 N (슬라이스 N×2-1, N×2)테이블 설계 최적화
sql
-- 배포 키와 정렬 키 설정
CREATE TABLE fact_sales (
sale_id BIGINT NOT NULL,
customer_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
sale_date DATE NOT NULL,
amount DECIMAL(12,2)
)
DISTKEY(customer_id) -- 조인 최적화
SORTKEY(sale_date) -- 범위 쿼리 최적화
ENCODE AUTO; -- 자동 압축 인코딩
-- 차원 테이블은 ALL 배포 (브로드캐스트)
CREATE TABLE dim_product (
product_id INTEGER NOT NULL,
product_name VARCHAR(200),
category VARCHAR(100)
)
DISTSTYLE ALL;S3에서 COPY 로드
sql
-- 파케이 형식에서 로드
COPY fact_sales
FROM 's3://my-bucket/sales/2024/'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftRole'
FORMAT AS PARQUET;
-- JSON 형식
COPY events
FROM 's3://my-bucket/events/'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftRole'
FORMAT AS JSON 'auto ignorecase'
MAXERROR 100;Redshift Spectrum (S3 직접 쿼리)
sql
-- 외부 스키마 생성 (S3/Glue 연결)
CREATE EXTERNAL SCHEMA spectrum
FROM DATA CATALOG
DATABASE 'my_glue_db'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftRole'
CREATE EXTERNAL DATABASE IF NOT EXISTS;
-- S3 파일 직접 쿼리 + Redshift 테이블 조인
SELECT r.customer_id, s.total_amount, r.customer_name
FROM spectrum.raw_orders s
JOIN dim_customer r ON s.customer_id = r.customer_id
WHERE s.order_date >= '2024-01-01';WLM (Workload Management)
json
{
"query_concurrency": 5,
"memory_percent_to_use": 60,
"query_groups": ["etl"],
"user_group": ["etl_users"],
"query_group_wildcard": 0
}