Amazon Athena
ユーザーガイド

SELECT

ゼロ個以上のテーブルから行を取得します。

概要

[ WITH with_query [, ...] ] SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ UNION [ ALL | DISTINCT ] union_query ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ LIMIT [ count | ALL ] ]

パラメータ

[ WITH with_query [, ....] ]

WITH を使用すると、ネストされたクエリをフラット化したり、サブクエリを簡素化できます。

WITH 句を使用して再帰的なクエリを作成することは、サポートされていません。

WITH 句はクエリの SELECT リストに先行し、SELECT クエリ内で使用する 1 つ以上のサブクエリを定義します。

各サブクエリは、ビュー定義と同じように、一時テーブルを定義します。一時テーブルは FROM 句で参照できます。このテーブルはクエリを実行時のみに使用します。

with_query 構文は次のとおりです。

subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)

各パラメーターの意味は次のとおりです。

  • subquery_table_name は、WITH 句のサブクエリの結果を定義する一時テーブルの一意な名前です。各 subquery には、FROM 句で参照可能なテーブル名を付ける必要があります。

  • column_name [, ...] は、出力列名の省略可能なリストです。列名の数は、subquery で定義した列数以下でなければなりません。

  • subquery は、任意のクエリステートメントです。

[ ALL | DISTINCT ] select_expr

select_expr は、選択する行を決定します。

ALL はデフォルトです。ALL は、それを省略した場合と同じように扱われます。すべての列のすべての行が選択され、重複も含まれます。

DISTINCT は、列に重複する値が含まれているときに、個別の値のみを返すために使用します。

FROM from_item [, ...]

クエリへの入力を示します。from_item は、以下に示すように、ビュー、結合コンストラクト、サブクエリのいずれかです。

from_item は以下のいずれかです。

  • table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]

    table_name は行の選択元であるターゲットテーブルの名前であり、aliasSELECT ステートメントの出力に渡す名前です。column_alias は指定した alias の列を定義します。

-または-

  • join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]

    join_type は以下のいずれかです。

    • [ INNER ] JOIN

    • LEFT [ OUTER ] JOIN

    • RIGHT [ OUTER ] JOIN

    • FULL [ OUTER ] JOIN

    • CROSS JOIN

    • ON join_condition | USING (join_column [, ...])join_condition では、複数のテーブルにおいて結合キーの列名を指定できます。join_column を使用するには、join_column が両方のテーブルに存在している必要があります。

[ WHERE 条件 ]

指定した condition に従って結果をフィルタ処理します。

[ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]

SELECT ステートメントの出力を、一致する値を持つ行に分割します。

ALLDISTINCT は、重複したグループ化セットごとに個別の出力行を生成するかどうかを決定します。省略すると、ALL が使用されます。

grouping_expressions では、複雑なグループ化オペレーションを実行できます。

grouping_expressions 要素は、SUMAVG あるいは COUNT などの任意の関数となり、出力列を位置で選択するための 1 から開始する序数です。

GROUP BY 式は、SELECT ステートメントの出力に表示されない入力列名で出力をグループ化できます。

すべての出力式は、集計関数であるか、GROUP BY 句に存在する列であることが必要です。

単一のクエリを使用して、複数の列セットの集計を必要とする分析を実行できます。

これらの複雑なグループ化オペレーションでは、入力列で構成される式がサポートされません。列名または序数のみが許可されます。

通常、UNION ALL を使用しても、これらの GROUP BY オペレーションと同じ結果を達成できます。ただし、GROUP BY を使用するクエリでは、データの読み取りが 1 回で済むという利点があります。UNION ALL は基となるデータを 3 回読み取るため、データソースが変わりやすい場合は、不整合な結果が生成されることがあります。

GROUP BY CUBE は特定の列のセットに対して、すべての可能なグループ化セットを生成します。GROUP BY ROLLUP は特定の列のセットに対して、すべての可能な小計を生成します。

[ HAVING condition ]

集計関数と GROUP BY 句で使用します。どのグループを選択するかを制御します。condition を満たさないグループは排除されます。このフィルタ処理は、グループや集計の計算後に行われます。

[ UNION [ ALL | DISTINCT ] union_query] ]

複数の SELECT ステートメントの結果を 1 つのクエリに結合します。ALL または DISTINCT は、最終的な結果セットに含める行を制御します。

ALL は、行が同一の場合でも、すべての行が含まれる処理を実行します。

DISTINCT は、結合した結果セットに含まれる一意の行のみを処理します。DISTINCT はデフォルトです。

複数の UNION 句は左から右に処理されます。ただし、括弧を使用して処理の順序を明示的に定義することもできます。

[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]

結果セットを 1 つ以上の出力 expression でソートします。

句に複数の式が含まれている場合、結果セットは最初の expression に従ってソートされます。次に、最初の式で一致した値がある行に 2 番目の expression が適用されます。以下、同様です。

expression では、SELECT の出力列を指定するか、出力列の位置を 1 から始まる序数で指定できます。

ORDER BY は、GROUP BY または HAVING 句の後で、最後のステップとして評価されます。ASCDESC は、結果のソートを昇順にするか、降順にするかを決定します。

デフォルトの null 順序は、昇順または降順のソート順に関係なしに NULLS LAST です。

LIMIT [ count | ALL ]

結果セットの行数を count に制限します。LIMIT ALLLIMIT 句を省略した場合と同じです。クエリに ORDER BY 句がない場合は、任意の結果になります。

TABLESAMPLE BERNOULLI | SYSTEM (percentage)

サンプリング方法に基づいてテーブルから行を選択する演算子 (オプション) です。

BERNOULLI は、percentage の確率でテーブルサンプルに存在する各行を選択します。テーブルのすべての物理ブロックがスキャンされ、サンプルの percentage とランタイムに計算されるランダム値の比較に基づいて、特定の行がスキップされます。

SYSTEM では、テーブルがデータの論理セグメントに分割され、この詳細度でテーブルがサンプリングされます。

特定のセグメントのすべての行が選択されるか、サンプルの percentage とランタイムに計算されたランダム値の比較に基づいて当該セグメントがスキップされます。SYTSTEM サンプリングはコネクタに依存します。この方法では、独立したサンプリング確率は保証されません。

[ UNNEST (array_or_map) [WITH ORDINALITY] ]

配列またはマップをリレーションに展開します。配列は単一の列に展開されます。マップは 2 つの列 (キー) に展開されます。

UNNEST に複数の引数を使用できます。これらの引数は、複数の列に展開され、各列の行数は最大の基数引数と同じになります。

その他の列には NULL が埋め込まれます。

WITH ORDINALITY 句は、序数列を末尾に追加します。

通常、UNNESTJOIN と一緒に使用し、JOIN の左側のリレーションの列を参照できます。

SELECT * FROM table;
SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os;

その他の例については、「Amazon Athena テーブルのデータのクエリ」を参照してください。

このページの内容: