Amazon S3 Select를 사용하여 데이터 쿼리 적용 - Amazon Simple Storage Service

Amazon S3 Select를 사용하여 데이터 쿼리 적용

중요

신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. 자세히 알아보기

Amazon S3 Select에서는 구조화 질의 언어(SQL) 문을 사용하여 Amazon S3 객체의 콘텐츠를 필터링하고 필요한 데이터의 하위 집합만 검색할 수 있습니다. Amazon S3 Select를 사용하여 이 데이터를 필터링하면 Amazon S3가 전송하는 데이터의 양을 줄일 수 있으며 이 데이터를 검색하는 데 드는 비용과 지연 시간이 감소됩니다.

Amazon S3 Select에서는 한 번에 하나의 객체만 쿼리할 수 있습니다. CSV, JSON 또는 Apache Parquet 형식으로 저장된 객체에 작동합니다. 이 기능은 GZIP 또는 BZIP2로 압축된 객체(CSV 및 JSON 객체에 한함)와 서버 측 암호화된 객체에도 사용할 수 있습니다. 결과 형식을 CSV 또는 JSON으로 지정할 수 있으며 결과의 레코드를 어떻게 구분할 것인지 결정할 수 있습니다.

요청에서 SQL 표현식을 Amazon S3로 전달합니다. Amazon S3 Select는 SQL의 하위 집합을 지원합니다. Amazon S3 Select가 지원하는 SQL 요소에 대한 자세한 내용은 Amazon S3 Select에 대한 SQL 참조 단원을 참조하십시오.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), SelectObjectContent REST API 작업 또는 AWS SDK를 사용하여 SQL 쿼리를 수행할 수 있습니다.

참고

Amazon S3 콘솔은 반환되는 데이터의 양을 40MB로 제한합니다. 더 많은 데이터를 검색하려면 AWS CLI 또는 API를 사용하십시오.

요구 사항 및 제한

다음은 Amazon S3 Select를 사용하기 위한 요구 사항입니다.

  • 쿼리를 하는 객체에 대해 s3:GetObject 권한이 있어야 합니다.

  • 쿼리하려는 객체가 고객 제공 키(SSE-C)를 사용한 서버 측 암호화로 암호화되어 있는 경우 https를 사용해야 하며, 요청에서 암호화 키를 제공해야 합니다.

Amazon S3 Select를 사용할 때는 다음 제한이 적용됩니다.

  • S3 Select에서는 요청당 하나의 객체만 쿼리할 수 있습니다.

  • SQL 표현식의 최대 길이는 256KB입니다.

  • 입력 또는 결과에 표시되는 레코드의 최대 길이는 1MB입니다.

  • Amazon S3 Select는 JSON 출력 형식을 사용하여 중첩 데이터만 내보낼 수 있습니다.

  • S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive 또는 Redundancy Reduction Storage(RRS) 스토리지 클래스에 저장된 객체를 쿼리할 수 없습니다. 또한 S3 Intelligent-Tiering Archive Access 계층 또는 S3 Intelligent-Tiering Deep Archive Access 계층에 저장된 객체를 쿼리할 수 없습니다. 스토리지 클래스에 대한 자세한 정보는 Amazon S3 스토리지 클래스 이해 및 관리를 참조하십시오.

Amazon S3 Select를 Parquet 객체와 함께 사용할 경우 다음과 같은 추가 제한 사항이 적용됩니다.

  • Amazon S3 Select는 GZIP 또는 Snappy를 사용한 열 기반 압축만 지원합니다. Amazon S3 Select는 Parquet 객체의 전체 객체 압축을 지원하지 않습니다.

  • Amazon S3 Select는 Parquet 출력을 지원하지 않습니다. 출력 형식은 CSV 또는 JSON으로 지정해야 합니다.

  • 최대 무압축 행 그룹 크기는 512MB입니다.

  • 객체의 스키마에 지정되어 있는 데이터 형식을 사용해야 합니다.

  • 반복 필드를 선택할 경우 마지막 값만 반환됩니다.

요청의 구성

요청을 구성할 때는 InputSerialization 객체를 사용하여 쿼리되는 객체의 세부 정보를 제공합니다. OutputSerialization 객체를 사용하여 결과가 어떻게 반환될 것인지에 대한 세부 정보를 제공합니다. Amazon S3가 요청을 필터링할 때 사용하는 SQL 표현식도 포함시킵니다.

Amazon S3 Select 요청을 구성하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service API 참조에서 SelectObjectContent를 참조하세요. 또한, 다음 단원에서 SDK 코드의 예시 중 하나를 확인할 수 있습니다.

스캔 범위를 사용하여 요청

Amazon S3 Select를 이용하면 쿼리할 바이트의 범위를 지정하여 객체의 하위 세트를 스캔할 수 있습니다. 이를 통해 작업을 일련의 겹치지 않는 스캔 범위에 대한 별도의 Amazon S3 Select 요청으로 분할하여 전체 객체 스캐닝을 병렬로 처리할 수 있습니다.

스캔 범위는 레코드 경계에 맞게 조정할 필요는 없습니다. Amazon S3 Select 스캔 범위 요청은 지정된 바이트 범위에 걸쳐 실행됩니다. 지정된 스캔 범위 내에서 시작하지만 해당 스캔 범위를 넘어서는 레코드는 쿼리에 의해 처리됩니다. 예를 들어 다음은 줄로 구분된 CSV 형식으로 된 일련의 레코드를 포함하는 Amazon S3 객체를 보여줍니다.

A,B C,D D,E E,F G,H I,J

Amazon S3 Select ScanRange 파라미터를 사용하여 (바이트) 1에서 시작하고 (바이트) 4에서 종료한다고 가정해 보겠습니다. 스캔 범위는 ","에서 시작하여 C로 시작하는 레코드가 끝날 때까지 스캔합니다. 스캔 범위 요청은 레코드가 끝나는 지점이기 때문에 결과 C, D를 반환합니다.

Amazon S3 Select 스캔 범위 요청은 Parquet, CSV(따옴표로 묶은 구분자 사용하지 않음) 또는 JSON 객체(LINES 모드에서만 해당)를 지원합니다. CSV 및 JSON 객체는 압축되어 있지 않아야 합니다. 선 기반 CSV 및 JSON 객체의 경우, 스캔 범위가 Amazon S3 Select 요청의 일부로 지정되면 스캔 범위 내에서 시작하는 모든 레코드가 처리됩니다. Parquet 객체의 경우, 요청된 스캔 범위 내에서 시작하는 모든 행 그룹이 처리됩니다.

Amazon S3 Select 스캔 범위 요청은 AWS CLI, Amazon S3 API 및 AWS SDK에서 사용할 수 있습니다. 이 기능을 위한 Amazon S3 Select 요청의 ScanRange 파라미터를 사용할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service API 참조에서 SelectObjectContent를 참조하십시오.

Errors

Amazon S3 Select는 쿼리 실행을 시도하는 동안 문제가 발생할 때 오류 코드 및 관련 오류 메시지를 반환합니다. 오류 코드 및 설명 목록은 Amazon Simple Storage Service API 참조에서 오류 응답 페이지의 SELECT 객체 콘텐츠 오류 코드 목록 단원을 참조하십시오.

Amazon S3 Select에 대한 자세한 내용은 다음 주제를 참조하세요.