SELECT
説明
SparkはSELECT
文をサポートしており、ANSI SQL標準に準拠しています。クエリは、1つ以上のテーブルから結果セットを取得するために使用されます。次のセクションでは、クエリの全体的な構文について説明し、サブセクションでは、例とともにクエリのさまざまな構成要素について説明します。
構文
[ WITH with_query [ , ... ] ]
select_statement [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select_statement, ... ]
[ ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ SORT BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ CLUSTER BY { expression [ , ... ] } ]
[ DISTRIBUTE BY { expression [, ... ] } ]
[ WINDOW { named_window [ , WINDOW named_window, ... ] } ]
[ LIMIT { ALL | expression } ]
select_statement
は以下のように定義されます。
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names ] [ , ... ] | TRANSFORM (...) ] }
FROM { from_item [ , ... ] }
[ PIVOT clause ]
[ UNPIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ WHERE boolean_expression ]
[ GROUP BY expression [ , ... ] ]
[ HAVING boolean_expression ]
パラメータ
-
with_query
メインのクエリブロックの前に共通テーブル式(CTE)を指定します。これらのテーブル式は、後でFROM句で参照できます。これは、FROM句で繰り返されるサブクエリブロックを抽象化し、クエリの可読性を向上させるのに役立ちます。
-
hints
ヒントを指定して、Sparkオプティマイザがより良い計画決定を行うのに役立てることができます。現在、Sparkは結合戦略の選択とデータの再パーティション分割に影響を与えるヒントをサポートしています。
-
ALL
関係から一致するすべての行を選択し、デフォルトで有効になっています。
-
DISTINCT
結果で重複を削除した後に、関係から一致するすべての行を選択します。
-
named_expression
名前が割り当てられた式。一般的に、列式を表します。
構文:
expression [[AS] alias]
-
from_item
クエリの入力ソースを指定します。次のいずれかになります。
-
PIVOT
PIVOT
句はデータの視点に使用されます。特定の列値に基づいて集計値を取得できます。 -
UNPIVOT
UNPIVOT
句は列を行に変換します。値の集計を除いて、PIVOT
の逆です。 -
LATERAL VIEW
LATERAL VIEW
句は、EXPLODE
などのジェネレータ関数と組み合わせて使用され、1つ以上の行を含む仮想テーブルを生成します。LATERAL VIEW
は、各元の出力行にこれらの行を適用します。 -
WHERE
指定された述語に基づいて、FROM句の結果をフィルタリングします。
-
GROUP BY
行をグループ化するのに使用される式を指定します。これは、集計関数(MIN、MAX、COUNT、SUM、AVGなど)と組み合わせて、グループ化式に基づいて行をグループ化し、各グループの値を集計するために使用されます。FILTER句が集計関数に付加されている場合、一致する行のみがその関数に渡されます。
-
HAVING
GROUP BYによって生成された行をフィルタリングする述語を指定します。HAVING句は、グループ化が実行された後に行をフィルタリングするために使用されます。GROUP BYなしでHAVINGが指定されている場合、グループ化式のないGROUP BY(グローバル集計)を示します。
-
ORDER BY
クエリの完全な結果セットの行の順序を指定します。出力行はパーティション全体でソートされます。このパラメータは
SORT BY
、CLUSTER BY
、DISTRIBUTE BY
と相互に排他的であり、同時に指定することはできません。 -
SORT BY
各パーティション内で行がソートされる順序を指定します。このパラメータは
ORDER BY
とCLUSTER BY
と相互に排他的であり、同時に指定することはできません。 -
CLUSTER BY
行を再パーティション化してソートするために使用される一連の式を指定します。この句を使用すると、
DISTRIBUTE BY
とSORT BY
を同時に使用した場合と同じ効果になります。 -
DISTRIBUTE BY
結果行が再パーティション化される一連の式を指定します。このパラメータは
ORDER BY
とCLUSTER BY
と相互に排他的であり、同時に指定することはできません。 -
LIMIT
ステートメントまたはサブクエリによって返される行の最大数を指定します。この句は、決定論的な結果を生成するために、主に
ORDER BY
と組み合わせて使用されます。 -
boolean_expression
boolean
型に評価される式を指定します。2つ以上の式は、論理演算子(AND
、OR
)を使用して組み合わせることができます。 -
expression
1つ以上の値、演算子、およびSQL関数の組み合わせを指定し、値に評価されます。
-
named_window
1つ以上のソースウィンドウ仕様のエイリアスを指定します。ソースウィンドウ仕様は、クエリのウィンドウ定義で参照できます。
-
regex_column_names
spark.sql.parser.quotedRegexColumnNames
がtrueの場合、SELECT
文の引用符で囲まれた識別子(バッククォートを使用)は正規表現として解釈され、SELECT
文は正規表現ベースの列指定を受け入れることができます。たとえば、以下のSQLは列c
のみを受け入れます。SELECT `(a|b)?+.+` FROM ( SELECT 1 as a, 2 as b, 3 as c )
-
TRANSFORM
ユーザー指定のコマンドまたはスクリプトをフォークして実行することにより、入力を変換するHiveスタイルの変換クエリ仕様を指定します。