Redshift의 테이블

Redshift 입문

Jason Myers

Principal Engineer

테이블 생성

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Redshift 입문

데이터 분산

Redshift 클러스터

  • 컴퓨트 노드에 분산 저장
  • Redshift 내부 row id, DISTKEY, 또는 PRIMARY KEY 사용
  • 여러 배포 스타일 제공
Redshift 입문

배포 스타일

Name Description Usage
ALL 모든 노드에 전체 테이블 복제 조인에 자주 쓰는 작은 조회 테이블
KEY DISTKEY 열 기준으로 분산 DISTKEY로 집계/조인할 때
EVEN 행 단위로 균등 분산 키가 없는 대용량 테이블
AUTO 작은 테이블은 ALL, 적절한 DISTKEY가 있으면 성장 시 KEY, 없으면 EVEN 기본값
Redshift 입문

DISTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- 데이터 배포 키를 
-- organization_id로 설정
DISTKEY(organization_id);
CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    -- organization_id를 데이터 
    -- 배포 키로 설정
    'organization_id' VARCHAR(31) DISTKEY,
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
);
Redshift 입문

배포 스타일 설정

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
-- 배포 스타일을 KEY로 설정
DISTSTYLE KEY;
Redshift 입문

SORTKEY

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
DISTKEY(organization_id)
DISTSTYLE KEY
-- 데이터 정렬 키를 
-- fk_monitoringlocation으로 설정
SORTKEY(fk_monitoringlocation);
  • 디스크 상 저장 순서 제어
  • 프레디킷 푸시다운 효과 증대
  • 여러 개 지정 가능
Redshift 입문

복수 SORTKEY 정의

CREATE TABLE IDAHO_SITE_ID
(
    'pk_siteid' INTEGER PRIMARY KEY,
    'fk_monitoringlocation' INTEGER,
    'organization_id' VARCHAR(31),
    'organizationformalname' VARCHAR(68),
    'organization' VARCHAR(16)
)
-- fk_monitoringlocation, organization_id를 복합 정렬 키로 설정
COMPOUND SORTKEY(fk_monitoringlocation, organization_id);
Redshift 입문

열 DISTKEY 및 SORTKEY 상태 보기

-- 열의 dist 및 sortkey 상태 보기
SELECT column_name, 
       distkey, 
       sortkey
  FROM SVV_REDSHIFT_COLUMNS
 -- spectrumdb 스키마에서만
 WHERE schema_name = 'spectrumdb'
   -- ecommerce_sales 테이블에 대해
   AND table_name = 'ecommerce_sales';
  • 결과

       column   | distkey | sortkey
    ============|=========|========
    year_qtr    | t       | 1
    total_sales | f       | 2
    ecom_sales  | f       | 0
    
  • Distkey 열

    • t는 True, f는 False
  • SORTKEY 열
    • #은 정렬 키 위치, 0은 미포함
Redshift 입문

배포 스타일 확인

  • SVV_TABLE_INFO
  • 쿼리 성능에 영향을 주는 테이블 정보
    • 배포 스타일
    • 배포 스큐
    • 테이블 크기
    • 정렬 키
    • 정렬 키 스큐
table          | encoded | diststyle       | sortkey1     | skew_sortkey1 | skew_rows
===============|=========|=================|==============|===============|===========
ecommerce_sales| N       | KEY(year_qtr)   | year_qtr     |               |          
date           | N       | ALL             | dateid       |          1.00 |
Redshift 입문

배포 스타일 확인 (계속)

SELECT table
       diststyle 
  FROM SVV_TABLE_INFO
 WHERE schema like 'spectrumdb';
table           | diststyle 
================|============== 
ecommerce_sales | KEY(year_qtr)
Redshift 입문

연습해 봅시다!

Redshift 입문

Preparing Video For Download...