

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Redshift Spectrum 사용 모범 사례
<a name="best-practices-redshift-spectrum"></a>

이 섹션에서는 [Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html) 사용 모범 사례에 대한 개요를 제공합니다. Redshift Spectrum을 사용할 때 최적의 성능을 얻으려면 다음 모범 사례를 따르는 것이 좋습니다.
+ 파일 유형은 Redshift Spectrum 쿼리 성능에 상당한 영향을 미친다고 가정합니다. 성능을 개선하려면 ORC 또는 Parquet과 같은 열 기반 인코딩 파일을 사용하고 매우 작은 차원 테이블에만 CSV 형식을 사용합니다.
+ 접두사 기반 분할을 사용하여 파티션 정리를 활용합니다. 즉, 데이터 레이크의 파티션에 키가 지정된 필터를 사용해야 합니다.
+ Redshift Spectrum은 대규모 요청을 처리하기 위해 자동으로 규모를 조정하므로 Redshift Spectrum에서 최대한 많은 작업을 수행합니다(예: 조건자 푸시다운).
+ 자주 필터링되는 열의 파일을 분할할 때 주의하세요. 데이터가 하나 이상의 필터링된 열로 분할된 경우 Redshift Spectrum은 파티션 정리를 활용하고 불필요한 파티션 및 파일 스캔을 건너뛸 수 있습니다. 일반적인 관행은 시간을 기준으로 데이터를 파티셔닝하는 것입니다.
+ 다음 쿼리를 사용하여 파티션의 효과와 Redshift Spectrum 쿼리의 효율성을 확인할 수 있습니다.

  ```
  Select query,
             segment,
             max(assigned_partitions) as total_partitions,
             max(qualified_partitions) as qualified_partitions
  From svl_s3partition
  Where query=pg_last_query_id()
  Group by 1,2;
  ```

  위의 쿼리는 다음을 보여줍니다.
  + **total\$1partitions** -에서 인식하는 파티션 수 AWS Glue Data Catalog
  + **qualified\$1partitions** - Redshift Spectrum 쿼리에 대해 액세스되는 Amazon Simple Storage Service(Amazon S3)의 접두사 수
+ 또한 `SVL_S3QUERY_SUMMARY` 시스템 테이블을 확인하여 파티션의 효과와 Redshift Spectrum 쿼리의 효율성에 대해 알아볼 수도 있습니다. 이렇게 하려면 다음 문을 사용하면 됩니다.

  ```
  Select *
  From svl_s3query_summary
  Where query=pg_last_query_id();
  ```

  이전 쿼리는 파티션 정리의 효율성을 보여주는 파일 외에도 `is_partitioned`, `s3_scanned_rows/bytes`, `s3_returned_rows/bytes` 값을 포함하여 훨씬 더 많은 정보를 반환합니다.

## Redshift Spectrum에서 조건자 푸시다운
<a name="predicate-pushdown"></a>

조건자 푸시다운을 사용하면 Amazon Redshift 클러스터에서 리소스를 소비하지 않습니다. 많은 SQL 작업을 Redshift Spectrum 계층으로 푸시다운할 수 있습니다. 가능하면 이를 활용하는 것이 좋습니다.

다음 사항에 유의하세요.
+ Redshift Spectrum 계층 내에서 다음을 포함한 일부 유형의 SQL 작업을 완전히 평가할 수 있습니다.
  + `GROUP BY` 절
  + 비교 및 패턴 일치 조건(예: `LIKE`)
  + 집계 함수(예: `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)
  + `regex_replace`, `to_upper`, `date_trunc` 및 기타 함수
+ `DISTINCT` 및 `ORDER BY`를 포함하여 일부 작업을 Redshift Spectrum 계층에 푸시할 수 없습니다. 리더 노드에서 정렬이 수행되므로 가능하면 쿼리의 최상위 수준에서만 `ORDER BY`를 수행합니다.
+ 쿼리 `EXPLAIN` 계획을 검사하여 조건자 푸시다운이 효과적인지 확인합니다. `EXPLAIN` 명령에서 Redshift Spectrum 부분을 찾으려면 다음 단계를 찾습니다.
  + S3 Seq Scan
  + S3 HashAggregate
  + S3 Query Scan
  + Seq Scan PartitionInfo
  + Partition Loop
+ 쿼리에서 가장 적은 수의 열을 사용합니다. Redshift Spectrum은 데이터가 Parquet 또는 ORC 형식인 경우 스캔을 위해 열을 제거할 수 있습니다.
+ 병렬 처리 및 파티션 제거를 위해 파티션을 광범위하게 사용하고 가능한 경우 파일 크기를 최소 64MB로 유지합니다.
+ `CREATE EXTERNAL TABLE` 또는 `ALTER TABLE`을 사용하는 경우 `TABLE PROPERTIES` `'numRows'='nnn'`을 설정합니다. Amazon Redshift는 쿼리 옵티마이저가 쿼리 계획을 생성하는 데 사용하는 테이블 통계를 생성하기 위해 외부 테이블을 분석하지 않습니다. 통계가 설정되지 않는 경우 Amazon Redshift는 외부 테이블이 더 큰 테이블이고 로컬 테이블이 더 작은 테이블이라고 가정합니다.

## Redshift Spectrum에 대한 쿼리 조정 팁
<a name="query-tuning-spectrum"></a>

쿼리를 조정할 경우 다음 사항에 유의하는 것이 좋습니다.
+ Amazon Redshift 클러스터가 쿼리에 대해 참여할 수 있는 Redshift Spectrum 노드 수는 클러스터의 조각 수와 연결됩니다.
+ 클러스터 크기를 조정하면 클러스터의 로컬 컴퓨팅 프로파일, 스토리지 프로파일 및 Amazon S3 데이터 레이크 쿼리의 쿼리 기능에 도움이 될 수 있습니다.
+ Amazon Redshift 쿼리 플래너는 가능하면 항상 조건자 및 집계를 Redshift Spectrum 쿼리 계층으로 푸시합니다.
+ Amazon S3에서 대량의 데이터가 반환되면 클러스터의 리소스에 의해 처리가 제한됩니다.
+ Redshift Spectrum은 대규모 요청을 처리하기 위해 자동으로 확장되므로 처리를 Redshift Spectrum 계층으로 푸시할 수 있을 때마다 전반적인 성능이 향상됩니다.