SELECT - Amazon Athena

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

SELECT

0 個以上のテーブルからデータの行を取得します。

注記

このトピックでは、参照用に概要情報を提供します。SELECT と SQL 言語の使用に関する包括的な情報は、このドキュメントでは説明しません。Athena に固有の SQL の使用については、「Amazon Athena での SQL クエリに関する考慮事項と制約事項」および「Amazon Athena を使用した SQL クエリの実行」を参照してください。

Synopsis

[ 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 ] ]
注記

SQL SELECT ステートメントの予約語は、二重引用符で囲む必要があります。詳細については、SQL SELECT ステートメントの予約キーワードのリスト を参照してください。

Parameters

[ 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はハッシュテーブルを構築します。このテーブルはメモリを消費します。パフォーマンスを向上させるには、クエリで重複を排除する必要のないUNION ALL場合に使用します。

複数の 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 では、テーブルがデータの論理セグメントに分割され、この詳細度でテーブルがサンプリングされます。

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

[ UNNEST (array_or_map) [WITH ORDINALITY] ]

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

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

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

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

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

でソースデータのファイルの場所を取得するAmazon S3

テーブル行内のデータファイルの場所を確認するには、次の例のように、 Amazon S3 "$path"をクエリで使用できます。SELECT

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

次のような結果が返されます。

s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json

テーブル内のデータの S3 ファイル名パスのソートされた一意のリストを返すには、次の例のように SELECT DISTINCTORDER BY を使用できます。

SELECT DISTINCT "$path" AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC

パスのないファイル名のみを返すには、次の例のように "$path" 関数にパラメータregexp_extractとして渡すことができます。

SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file FROM sampledb.elb_logs ORDER By data_source_file ASC

特定のファイルからデータを返すには、次の例のように句でファイルを指定します。WHERE

SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://awsexamplebucket/my_table/my_partition/file-01.csv'

詳細と例については、ナレッジセンターの記事で、Athena テーブルの行の Amazon S3 ソースファイルを表示する方法を参照してください。http://aws.amazon.com/premiumsupport/knowledge-center/find-s3-source-file-athena-table-row/

一重引用符のエスケープ

一重引用符をエスケープするには、以下の例のように、その前に別の一重引用符を付けます。これを二重引用符と混同しないでください。

Select 'O''Reilly'

Results

O'Reilly

その他のリソース

でのSELECTステートメントの使用の詳細については、次のリソースを参照してください。Athena

詳細については、 詳細については以下を参照してください。
で実行中のクエリAthena Amazon Athena を使用した SQL クエリの実行
を使用したテーブルの作成SELECT クエリ結果からのテーブルの作成 (CTAS)
SELECTクエリから別のテーブルにデータを挿入する INSERT INTO
SELECTステートメントでの組み込み関数の使用 Amazon Athena の Presto 関数
SELECTステートメントでのユーザー定義関数の使用 ユーザー定義関数を使用したクエリ(プレビュー)
Data Catalogメタデータのクエリ AWS Glue データカタログ のクエリ