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 } ]
While select_statement is defined as
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names | star ] [ , ... ] | 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] -
star
*(スター) 句は、FROM 句の 1 つ以上のリレーションからすべてまたはほとんどの列を選択するために使用されます。 -
from_item
クエリの入力ソースを指定します。次のいずれかになります。
- Table relation
- Join relation
- Pivot relation
- Unpivot relation
- Table-value function
- Inline table
- [ LATERAL ] ( Subquery )
- ファイル
-
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 句は、グループ化が実行された後に句をフィルタリングするために使用されます。HAVING が GROUP BY なしで指定されている場合、グループ化式のない 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)
値、演算子、および 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 スタイルの変換クエリ仕様を指定します。