Amazon S3 Select로 데이터를 제자리에서 조회하기

Amazon S3 Select로 데이터를 제자리에서 조회하기

전체 객체를 다운로드하지 않고 필요한 데이터만 골라내고 싶을 때가 있죠. Amazon S3 Select를 쓰면 SQL 문으로 S3 객체 내용을 필터링해서 필요한 부분만 가져올 수 있어요. 전송되는 데이터 양이 줄어들어 비용과 지연 시간도 함께 줄어듭니다.

출처: 문서

본문

중요 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 요소에 대한 자세한 내용은 SQL reference for Amazon S3 Select 문서를 참고하세요.

SQL 쿼리는 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), SelectObjectContent REST API 작업, AWS SDK로 수행할 수 있어요.

참고 Amazon S3 콘솔은 반환되는 데이터 양을 40MB로 제한해요. 더 많은 데이터를 검색하려면 AWS CLI나 API를 사용하세요.

요구 사항과 한계

Amazon S3 Select를 사용하기 위한 요구 사항은 다음과 같아요.

  • 조회하는 객체에 대한 s3:GetObject 권한이 있어야 해요.
  • 조회하는 객체가 고객 제공 키로 서버 측 암호화(SSE-C)된 경우 https를 사용해야 하고, 요청에 암호화 키를 제공해야 해요.

Amazon S3 Select를 사용할 때 다음 한계가 적용돼요.

  • S3 Select는 요청당 한 객체만 조회할 수 있어요.
  • S3 Select는 최대 5TB 크기의 파일 조회를 지원해요.
  • SQL 표현식의 최대 길이는 256KB예요.
  • 입력 또는 결과에서 레코드의 최대 길이는 1MB예요.
  • Amazon S3 Select는 중첩 데이터를 JSON 출력 형식으로만 내보낼 수 있어요.
  • S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive, Reduced Redundancy Storage(RRS) 스토리지 클래스에 저장된 객체는 조회할 수 없어요. 또한 S3 Intelligent-Tiering Archive Access 계층이나 S3 Intelligent-Tiering Deep Archive Access 계층에 저장된 객체도 조회할 수 없어요. 스토리지 클래스에 대한 자세한 내용은 Understanding and managing Amazon S3 storage classes 문서를 참고하세요.

Parquet 객체와 함께 Amazon S3 Select를 사용할 때는 추가 한계가 적용돼요.

  • Amazon S3 Select는 GZIP 또는 Snappy를 사용한 열 단위(columnar) 압축만 지원해요. Parquet 객체에 대한 전체 객체 압축은 지원하지 않아요.
  • Amazon S3 Select는 Parquet 출력을 지원하지 않아요. 출력 형식을 CSV 또는 JSON으로 지정해야 해요.
  • 압축되지 않은 행 그룹(row group)의 최대 크기는 512MB예요.
  • 객체의 스키마에 지정된 데이터 형식을 사용해야 해요.
  • 반복되는 필드를 선택하면 마지막 값만 반환돼요.

요청 구성하기

요청을 구성할 때는 InputSerialization 객체로 조회되는 객체의 세부 정보를 제공해요. OutputSerialization 객체로 결과가 반환되는 방식을 제공하고, Amazon S3가 요청을 필터링하는 데 사용하는 SQL 표현식도 포함해요.

Amazon S3 Select 요청 구성에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 SelectObjectContent를 참고하세요. 아래 절의 SDK 코드 예제 중 하나도 확인할 수 있어요.

스캔 범위(scan range)를 사용한 요청

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 매개변수를 사용하고 Start(Byte)를 1, End(Byte)를 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 Reference의 SelectObjectContent를 참고하세요.

오류

Amazon S3 Select는 쿼리 실행 중 문제가 발생하면 오류 코드와 관련 오류 메시지를 반환해요. 오류 코드와 설명 목록은 Amazon Simple Storage Service API Reference의 Error Responses 페이지에 있는 List of SELECT Object Content Error Codes 섹션을 참고하세요.

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