Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

SELECT コマンド

Amazon S3 Select および Amazon Glacier Select は、SELECT SQL コマンドのみをサポートします。次の ANSI スタンダードの句は、SELECT 用にサポートされています。

  • SELECT リスト

  • FROM

  • WHERE

  • LIMIT 句 (Amazon S3 Select のみ)

注記

Amazon S3 Select および Amazon Glacier Select クエリでは、現在サブクエリや結合はサポートされていません。

SELECT リスト

SELECT リストは、クエリに返させる列、関数、および式を指定します。このリストは、クエリの出力を表しています。

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

* (アスタリスク) を使用した最初の形式では、WHERE 句を通過したすべての行がそのまま返されます。2 番目の形式では、各列にユーザー定義の出力スカラー式 projection のある行が作成されます。

FROM 句

Amazon S3 Select および Amazon Glacier Select では、FROM 句の以下の形式がサポートされています。

FROM table_name FROM table_name alias FROM table_name AS alias

ここで、table_nameS3Object のいずれか (Amazon S3 Select の場合) または ARCHIVEOBJECT (Amazon Glacier Select の場合) となり、クエリ中のアーカイブを指しています。従来のリレーショナルデータベースから移行したユーザーは、これをテーブルに対する複数のビューを含むデータベーススキーマとして考えることができます。

スタンダード SQL に従って、FROM 句は WHERE 句でフィルタリングされ SELECT リストで射影される行を作成します。

WHERE 句

WHERE 句は、この構文に従います。

WHERE condition

WHERE 句は condition に基づいて行をフィルタリングします。condition は、ブール型の結果を持つ式です。condition の結果が TRUE である行のみが結果で返されます。

LIMIT 句 (Amazon S3 Select のみ)

LIMIT 句は、この構文に従います。

LIMIT number

LIMIT 句により、に基づいてクエリで返されるレコードの数を制限できます。

注記

Amazon Glacier Select は LIMIT 句をサポートしていません。

属性アクセス

SELECT および WHERE 句は、クエリ中のファイルが CSV 形式であるか JSON 形式にあるかによって、以下のセクションのいずれかのメソッドを使用してレコードデータを参照できます。

CSV

  • 列名 – 列名が _N である、行の N 番目の列を参照できます。N が列位置です。位置カウントは 1 から始まります。たとえば、最初の列名は _1 で、2 番目の列名は _2 です。

    列は _N または alias._N として参照できます。たとえば、_2myAlias._2 はどちらも SELECT リストおよび WHERE 句の列を参照するのに有効な方法です。

  • 列ヘッダー – ヘッダー行を持つ CSV 形式のオブジェクトの場合、ヘッダーは SELECT リストおよび WHERE 句で利用できます。特に、従来の SQL では、SELECT および WHERE 句の式内で、alias.column_name または column_name で列を参照できます。

JSON (Amazon S3 Select のみ)

  • ドキュメント – JSON ドキュメントのフィールドは alias.name としてアクセスできます。ネストされたフィールドにもアクセスできます (例: alias.name1.name2.name3)。

  • リスト[] 演算子で、ゼロベースのインデックスを使用して JSON リストの要素にアクセスできます。たとえば、リストの 2 番目の要素に 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」という 1 つのヘッダー/属性と、「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) Amazon S3 または Amazon Glacier オブジェクトが CSV 形式で、指定された列ヘッダーを持ち、クエリリクエストに対して FileHeaderInfo が「Use」に設定されているか、2) Amazon S3 オブジェクトが JSON 形式で、指定された属性を持ちます。

例: クエリ中のオブジェクトに、予約キーワードである「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 ]