RedShift 03.

Q·2024년 2월 6일
0

AWS

목록 보기
4/15

아래 쿼리가 느린 이유

select *
from db.table
limit 1
  • 위의 쿼리를 실행하였을때 mysql에서는 빠르게 데이터를 가져올 수 있으나 redshift에서는 오랜 시간이 걸리는 것을 볼 수 있습니다.
  • 그 이유는 mysql에서는 각각의 데이터블록에 각각 행별로 데이터가 들어가 있지만
  • redshift의 경우 데이터블록에 각각 컬럼별로 데이터가 들어가 있기 때문에 위의 쿼리를 날렸을때 각각의 데이터 블록에서 컬럼들을 가져와야 하기 때문에 시간이 오래 걸리는 것입니다.

Redshift의 컬럼 기반 데이터 스캔 과정

  1. 모든 컬럼 스캔: SELECT * 쿼리는 테이블의 모든 컬럼을 가져오도록 요청합니다. Redshift에서는 이를 위해 테이블의 각 컬럼에 저장된 데이터 블록을 개별적으로 읽어야 합니다.

  2. 데이터 블록 접근: 각 컬럼은 별도의 데이터 블록에 저장되어 있으므로, Redshift는 이러한 모든 컬럼의 데이터 블록에 접근해야 합니다. 이는 상당한 I/O 작업을 발생시킬 수 있습니다.

  3. 첫 번째 레코드 찾기: 비록 LIMIT 1이 설정되어 있어서 하나의 레코드만 필요하더라도, Redshift는 첫 번째 레코드를 구성하는 데 필요한 모든 컬럼의 데이터를 수집해야 합니다.

효율적인 쿼리 방법

  1. 특정 컬럼 선택: 필요한 컬럼만 지정하는 것이 더 효율적입니다. 예를 들어, SELECT column1, column2 FROM db.table LIMIT 1과 같이 쿼리를 작성하면, 필요한 컬럼만 스캔하여 성능을 개선할 수 있습니다.

  2. 파티션 및 정렬 키 활용: 파티션 및 정렬 키를 효율적으로 사용하여 데이터 스캔 범위를 줄일 수 있습니다.

Redshift Spectrum 파티셔닝

Amazon Redshift Spectrum을 사용하여 S3에 저장된 데이터를 파티셔닝할 때, 이 파티셔닝 정보는 AWS Glue Data Catalog나 호환되는 Hive 메타스토어에 저장됩니다. Redshift Spectrum은 이 메타스토어에서 파티셔닝 정보를 읽어, 쿼리 실행 시 필요한 데이터 블록을 정확하게 식별하고 가져올 수 있습니다.

파티셔닝 정보의 저장

  1. AWS Glue Data Catalog 또는 Hive 메타스토어
    외부 테이블과 그 파티셔닝 구조는 AWS Glue Data Catalog 또는 Hive 메타스토어에 저장됩니다. 이 메타스토어는 테이블 스키마, 데이터 파일 위치, 파티션 키 및 그 값을 포함합니다.

  2. 파티션 정보 정의
    외부 테이블을 생성할 때 CREATE EXTERNAL TABLE 문을 사용하고, PARTITIONED BY 절을 통해 파티션 키를 정의합니다.
    파티션에 대한 실제 데이터 경로는 ALTER TABLE ADD PARTITION 문을 사용하여 메타스토어에 추가됩니다.

Redshift Spectrum의 데이터 처리:

  1. 쿼리 실행
    사용자가 Redshift Spectrum을 통해 쿼리를 실행할 때, Redshift는 먼저 AWS Glue Data Catalog 또는 Hive 메타스토어를 조회하여 필요한 파티션 정보를 가져옵니다.

  2. 파티션 정보 사용
    쿼리에 파티션 키에 대한 조건이 포함되어 있다면, Redshift Spectrum은 해당 조건과 일치하는 파티션만을 선택합니다. 이를 통해 쿼리는 필요한 데이터만을 스캔하게 되며, 이는 쿼리 성능을 크게 향상시킵니다.

  3. 데이터 읽기
    일치하는 파티션의 위치 정보를 바탕으로, Redshift Spectrum은 S3에서 필요한 데이터 블록을 읽어옵니다.

  4. 결과 반환
    읽어온 데이터는 처리되어 최종적으로 Redshift 클러스터로 전송되며, 사용자에게 쿼리 결과가 반환됩니다.

Redshift 내부 데이터 블록

  1. 컬럼 기반 저장
    Redshift는 컬럼 기반 데이터 웨어하우스입니다. 데이터는 컬럼별로 저장되며, 각 컬럼의 데이터는 별도의 데이터 블록에 저장됩니다.

  2. 데이터 블록의 구조
    데이터 블록은 Redshift 클러스터 내의 노드에 저장됩니다. 각 블록은 특정 컬럼의 데이터를 포함하며, 이러한 구조는 효율적인 데이터 압축과 빠른 쿼리 실행을 가능하게 합니다.

  3. 분산 처리
    Redshift는 여러 컴퓨팅 노드에 걸쳐 데이터를 분산 저장하고 처리합니다. 각 노드는 자신에게 할당된 데이터 블록을 처리합니다.

S3에 저장된 데이터 블록 (Redshift Spectrum 사용 시)

  1. 파일 기반 저장
    S3에서는 데이터가 파일 형태로 저장됩니다. 이 파일들은 Redshift Spectrum을 통해 외부 테이블로 접근될 수 있으며, 각 파일은 하나 이상의 데이터 블록으로 간주될 수 있습니다.

  2. 파티셔닝 및 데이터 형식
    S3에 저장된 데이터는 종종 파티셔닝되어 있으며, 다양한 형식(예: Parquet, ORC, CSV)으로 저장될 수 있습니다. Parquet나 ORC 같은 형식은 컬럼 기반의 저장 형식을 사용하여 효율적인 데이터 스캔과 성능을 제공합니다.

  3. Spectrum 처리
    Redshift Spectrum은 S3에 저장된 파일(데이터 블록)을 읽고, 필요한 데이터만을 선택하여 Redshift 엔진으로 전달합니다. 이 과정에서 Glue Data Catalog의 메타데이터를 사용하여 필요한 파일과 파티션을 식별합니다.

Amazon Redshift와 Amazon Redshift Spectrum의 메타데이터 관리

Redshift 내부 메타데이터

  • Redshift 클러스터 내부에서 사용되는 메타데이터는 리더 노드에 의해 관리됩니다.
  • 리더 노드는 클러스터 내부의 테이블, 뷰, 사용자, 권한 등에 관한 메타데이터를 처리하고 저장합니다.
  • 이 메타데이터는 쿼리 실행 계획, 데이터 분산, 조인 최적화 등에 사용됩니다.

Redshift Spectrum과 AWS Glue Data Catalog:

  • Redshift Spectrum을 사용할 때, 외부 테이블과 관련된 메타데이터는 AWS Glue Data Catalog에 저장됩니다.
  • AWS Glue Data Catalog는 데이터 레이크 환경에서 다양한 데이터 소스의 스키마와 메타데이터를 중앙에서 관리하는 서비스입니다.
  • Spectrum은 Glue Data Catalog에서 메타데이터를 읽어, Amazon S3에 저장된 데이터에 대한 쿼리를 해석하고 실행합니다.
profile
Data Engineer

0개의 댓글