메뉴
Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

SELECT 명령

Amazon S3 Select와 Amazon Glacier Select는 SELECT SQL 명령만 지원합니다. SELECT에서 지원되는 ANSI 표준 절은 다음과 같습니다.

  • SELECT 계정의

  • FROM

  • WHERE

  • LIMIT 절(Amazon S3 Select만 해당)

참고

Amazon S3 Select와 Amazon Glacier Select 쿼리는 현재 하위 쿼리 또는 조인을 지원하지 않습니다.

목록 SELECT

SELECT 목록은 쿼리에서 반환하려는 열, 함수 및 표현식의 이름을 지정합니다. 목록은 쿼리의 출력을 나타냅니다.

SELECT * SELECT projection [ AS column_alias | column_alias ] [, ...]

*(별표)가 있는 첫 번째 형식은 WHERE 절을 통과한 모든 행을 그대로 반환합니다. 두 번째 형식은 각 열마다 사용자 정의 출력 스칼라 표현식 투영이 포함된 행을 생성합니다.

FROM 절

Amazon S3 Select와 Amazon Glacier Select는 다음 형식의 FROM 절을 지원합니다.

FROM table_name FROM table_name alias FROM table_name AS alias

여기서 table_name은 쿼리되는 아카이브를 참조하는 S3Object(Amazon S3 Select의 경우) 또는 ARCHIVE 또는 OBJECT(Amazon Glacier Select의 경우) 중 하나입니다. 기존의 관계형 데이터베이스를 사용해오던 사용자의 경우, 이것을 단일 테이블에 대해 다수의 보기를 포함하는 데이터베이스 스키마로 생각할 수 있습니다.

표준 SQL에 따라 FROM 절은 WHERE 절에서 필터링되고 SELECT 목록에서 예상되는 행을 생성합니다.

WHERE 절

WHERE 절은 다음 구문에 따릅니다.

WHERE condition

WHERE 절은 조건에 기반하여 행을 필터링합니다. 조건은 부울 결과가 있는 표현식입니다. 조건이 TRUE로 평가되는 행만이 결과에서 반환됩니다.

LIMIT 절(Amazon S3 Select만 해당)

LIMIT 절은 다음 구문에 따릅니다.

LIMIT number

LIMIT 절은 쿼리가 반환하게 할 레코드의 수를 숫자에 기초하여 제한합니다.

참고

Amazon Glacier Select는 LIMIT 절을 지원하지 않습니다.

속성 액세스

SELECTWHERE 절은 쿼리되는 파일이 CSV 형식인지 JSON 형식인지에 따라 다음 단원에서 소개하는 메서드 중 하나를 사용하여 레코드 데이터를 참조할 수 있습니다.

CSV

  • 열 번호 – 열 이름 _N으로 특정 행의 N번째 열을 참조할 수 있습니다(여기서 N은 열의 위치입니다). 위치 카운트는 1에서 시작합니다. 예를 들어, 첫 번째 열의 이름은 _1이고, 두 번째 열의 이름은 _2입니다.

    열을 _N 또는 alias._N이라고 부를 수 있습니다. 예를 들어, _2myAlias._2는 모두 SELECT 목록과 WHERE 절에 있는 열을 참조하는 유효한 방법입니다.

  • 열 머리글 – 머리글이 있는 CSV 형식의 객체들은 그 머리글이 SELECT 목록과 WHERE 절에 제공됩니다. 특히 기존의 SQL과 같이, SELECTWHERE 절 표현식에서 alias.column_name 또는 column_name으로 열을 참조할 수 있습니다.

JSON(Amazon S3 Select만 해당)

  • 문서alias.name으로 JSON 문서 필드에 액세스할 수 있습니다. 중첩 필드에도 액세스할 수 있습니다(예: alias.name1.name2.name3).

  • 목록[] 연산자가 있는 0 기반 인덱스를 사용하여 JSON 목록의 요소들에 액세스할 수 있습니다. 예를 들어, 목록의 두 번째 요소에 alias[1]로 액세스할 수 있습니다. 목록 요소에 대한 액세스를 alias.name1.name2[1].name3의 필드와 결합할 수 있습니다.

  • 예제: 이 JSON 객체를 샘플 데이터 세트로 간주합니다.

    {"name": "Susan Smith", "org": "engineering", "projects": [ {"project_name":"project1", "completed":false}, {"project_name":"project2", "completed":true} ] }

    예제 #1: 다음 쿼리는 다음과 같은 결과를 반환합니다.

    Select s.name from S3Object s
    {"name":"Susan Smith"}

    예제 #2: 다음 쿼리는 다음과 같은 결과를 반환합니다.

    Select s.projects[0].project_name from S3Object s
    {"project_name":"project1"}

머리글/속성 이름의 대/소문자 구분

Amazon S3 Select와 Amazon Glacier Select에서 큰 따옴표를 사용하여 열 머리글(CSV 객체)과 속성(JSON 객체)이 대/소문자를 구분한다는 것을 표시할 수 있습니다. 큰 따옴표가 없으면 객체 머리글/속성이 대/소문자를 구분하지 않는 것입니다. 모호한 경우에는 오류가 발생합니다.

다음의 예제들은 1) 열 머리글이 지정되어 있고 쿼리 요청에 대해 FileHeaderInfo가 "Use(사용)"로 설정되어 있는 CSV 형식의 Amazon S3 또는 Amazon Glacier 객체, 또는 2) 속성이 지정된 JSON 형식의 Amazon S3 객체입니다.

예제 #1: 쿼리되는 객체가 머리글/속성 "NAME"을 갖습니다.

  • 다음 표현식은 객체에서 값을 성공적으로 반환합니다(따옴표 없음: 대/소문자를 구분하지 않음).

    SELECT s.name from S3Object s
  • 다음 표현식의 결과는 400 오류 MissingHeaderName입니다(따옴표: 대/소문자를 구분함).

    SELECT s."name" from S3Object s

예제 #2: 쿼리되는 Amazon S3 객체가 "NAME"이라는 한 머리글/속성과 "name"이라는 또 다른 머리글/속성을 갖습니다.

  • 다음 표현식의 결과는 400 오류 AmbiguousFieldName입니다(따옴표 없음: 대/소문자를 구분하지 않으나 일치하는 것이 2개가 있음).

    SELECT s.name from S3Object s
  • 다음 표현식은 객체에서 값을 성공적으로 반환합니다(따옴표: 대/소문자를 구분하므로 모호함이 해결됨).

    SELECT s."NAME" from S3Object s

예약어를 사용자 정의 용어로 사용

Amazon S3 Select와 Amazon Glacier Select에는 객체 콘텐츠를 쿼리하는 데 사용되는 SQL 표현식을 실행하기 위해 필요한 일련의 예약어가 있습니다. 예약어에는 함수 이름, 데이터 유형, 연산자 등이 포함됩니다. 어떤 경우에는 열 머리글(CSV 파일의 경우)이나 속성(JSON 객체의 경우) 같은 사용자 정의 용어가 예약어와 충돌할 수가 있습니다. 이 경우에는 예약어와 충돌하는 사용자 정의 용어를 일부러 사용하고 있다는 것을 큰 따옴표를 사용하여 표시해야 합니다. 이렇게 하지 않으면 400 구문 분석 오류가 발생할 것입니다.

예약어의 전체 목록은 예약어 단원을 참조하십시오.

다음의 예제는 1) 열 머리글이 지정되어 있고 쿼리 요청에 대해 FileHeaderInfo가 "Use(사용)"로 설정되어 있는 CSV 형식의 하나의 Amazon S3 또는 Amazon Glacier 객체, 또는 2) 속성이 지정된 JSON 형식의 하나의 Amazon S3 객체입니다.

예제: 쿼리되는 객체가 "CAST"(예약어임)라는 머리글/속성을 갖습니다.

  • 다음 표현식은 객체에서 값을 성공적으로 반환합니다(따옴표: 사용자 정의 머리글/속성을 사용함).

    SELECT s."CAST" from S3Object s
  • 다음 표현식의 결과는 400 구문 분석 오류입니다(따옴표 없음: 예약어와 충돌함).

    SELECT s.CAST from S3Object s

스칼라 표현식

WHERE 절과 SELECT 목록 내에서 스칼라 값을 반환하는 표현식인 SQL 스칼라 표현식을 사용할 수 있습니다. 스칼라 표현식의 형식은 다음과 같습니다.

  • literal

    SQL 리터럴.

  • column_reference

    column_name 또는 alias.column_name 형식의 열에 대한 참조.

  • unary_op 표현식

    여기서 unary_op 단항은 SQL 단항 연산자입니다.

  • 표현식 binary_op 표현식

    여기서 binary_op는 SQL 이항 연산자입니다.

  • func_name

    여기서 func_name은 호출할 스칼라 함수의 이름입니다.

  • 표현식 [ NOT ] BETWEEN 표현식 AND 표현식

  • 표현식 LIKE 표현식 [ ESCAPE 표현식 ]