데이터 엔지니어 기술 블로그

[⚡AWS] Redshift 기초 이해하기 본문

데이터 엔지니어링

[⚡AWS] Redshift 기초 이해하기

jun_yeong_park 2021. 10. 12. 01:10
반응형

레드시프트란?

AWS에서 제공하고, AWS와 쉽게 통합할 수 있으며 컬럼 기반, PostgreSQL을 기반으로 만들어져 있다. 리더 노드와 실제로 쿼리를 처리하는 컴퓨터 노드가 있는 클러스터로 구성되어 있어서 쉽게 확장할 수 있다. 클라우드 데이터 웨어하우스를 만들 때 사용한다.

 

 

레드시프트 기능

정렬 키(SORT KEY)

  • 정렬키에 따라 순서대로 데이터베이스에 저장한다.
  • 자동 테이블 최적화 작업을 하면 정렬키를 선택할 필요가 없다.
  • AUTO 키워드를 사용하여 자동으로 정렬키를 선택할 수 있다.
  • 자주 사용되거나 조인되는 경우 사용하면 된다.

분산

  • 테이블을 생성할 때 4가지(AUTO, EVEN, KEY, ALL)중 하나를 선택할 수 있다.
  • 분산키를 선택하지 않으면 AUTO를 사용한다.

 

기본 키 및 외래 키 제약 조건 정의(Define primary key and foreign key constraints)

  • 실제로 그 기능을 수행해주지는 못한다.
  • 쿼리 최적화를 할 때 도움을 줄 수 있으므로 설정해두는 편이 좋을 수 있다.

 

열 크기

  • VARCHAR 컬럼에 필요한 가장 작은 값을 사용해야 한다. 왜냐하면 평소에는 상관없지만, 복잡한 쿼리를 처리하는 동안 임시 테이블에 저장할 수 있는데, 임시테이블은 압축되지 않는다.

 

날짜 / 시간

  • DATE, TIMESTAMP를 사용하면 Redshift는 그 값을 더 효율적으로 저장한다.
  • 해상도에 따라 DATE 또는 TIMESTAMP를 사용한다.

 

UPSERT

  • UPSERT를 제공해주지 않는다.
  • UPSERT 방법
    • 스테이지 테이블에 UPSERT할 데이터를 올린다.
    • INNER JOIN을 사용해 업데이트할 행을 삭제하고 INSERT한다.

 

S3 Query

  • Amazon Redshift Spectrum을 사용하여 S3파일을 쿼리할 수 있다.
  • Glue 데이터 카탈로그를 사용한다.

 

Federated Query(연합 쿼리)

 

외부의 MySQL, Postgres 데이터베이스에 있는 테이블을 이용해 Redshift가 가진 테이블과 조인하는 등의 작업을 할 수 있다. 아래는 그 예시이다.

CREATE EXTERNAL SCHEMA amysql
FROM MYSQL
DATABASE 'functional'
URI 'endpoint to remote hostname'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO'
SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';
SELECT level FROM amysql.employees LIMIT 1;
            
 level
-------
     8

 

 

 

레드시프트 클러스터

 

아키텍처

클러스터

Leader Node와 실제로 처리를 해주는 Compute Node로 나뉜다. 컴퓨팅 노드는 노드 슬라이스로 분할되며, 슬라이스에 리소스가 각자 할당된다. 슬라이스는 병렬로 작동하여 작업을 완료한다.

레드시프트는 대규모 병렬 처리 MPP(Massively Parallel Processing)를 할 수 있다.

 

컬럼 데이터 스토리지

  • 컬럼 기반으로 디스크에서 로드해야 하는 양을 줄이고, 그 덕분에 인메모리에서 더 많은 필요한 데이터를 사용하여 효율적으로 처리할 수 있다.

 

데이터 압축

  • 디스크 I/O를 줄여준다. 필요한 데이터를 메모리로 불러온 후 쿼리 중에 압축이 해제된다.

 

결과 캐싱

  • 특정 유형의 쿼리 결과를 캐싱하여 다음에 더 빠르게 쿼리할 수 있도록 한다.

 

컴파일된 코드

  • 쿼리 중 불필요한 작업을 제거하고 수정하여 최적화한 뒤 쿼리를 보내 더 효율적으로 처리할 수 있도록 한다.

 

워크로드

  • 기본적으로 1개의 대기열에 5개의 쿼리가 동시에 실행된다.
  • 최대 8개의 대기열을 만들 수 있으며 최대 50개의 쿼리를 동시에 처리하도록 구성할 수 있다.

 

AQUA

  • Advanced Query Accelerator
  • 맞춤형 하드웨어를 사용하여 대규모 데이터 세트를 스캔하는 쿼리의 속도를 높여준다.
  • 특정 노드 유형의 클러스터에서 사용할 수 있다.

 

반응형
Comments