選択Select

SELECT [hints, ...] [ALL|DISTINCT] named_expression[, named_expression, ...]
  FROM relation[, relation, ...]
  [lateral_view[, lateral_view, ...]]
  [WHERE boolean_expression]
  [aggregation [HAVING boolean_expression]]
  [ORDER BY sort_expressions]
  [CLUSTER BY expressions]
  [DISTRIBUTE BY expressions]
  [SORT BY sort_expressions]
  [WINDOW named_window[, WINDOW named_window, ...]]
  [LIMIT num_rows]

named_expression:
  : expression [AS alias]

relation:
  | join_relation
  | (table_name|query|relation) [sample] [AS alias]
  : VALUES (expressions)[, (expressions), ...]
        [AS (column_name[, column_name, ...])]

expressions:
  : expression[, expression, ...]

sort_expressions:
  : expression [ASC|DESC][, expression [ASC|DESC], ...]

1つ以上のリレーションからデータを出力します。Output data from one or more relations.

リレーションシップとは、入力データの任意のソースを指します。A relation refers to any source of input data. 既存のテーブル (またはビュー) の内容、既存の2つのテーブルの結合された結果、またはサブクエリ (別の SELECT ステートメントの結果) の可能性があります。It could be the contents of an existing table (or view), the joined result of two existing tables, or a subquery (the result of another SELECT statement).

(デルタ Lake on Azure Databricks)Delta Lake では、テーブルへのパス (delta./path/to/table_name またはテーブル名: table_name) を指定することによって、リレーションシップを指定します。(Delta Lake on Azure Databricks) In Delta Lake, you specify a relation either by providing a path to a table: delta./path/to/table_name or a table name: table_name. また、テーブル識別子の後に TIMESTAMP AS OFVERSION AS OF、または @ 構文を使用してタイムトラベルバージョンを指定することもできます。In addition, you can specify a time travel version using TIMESTAMP AS OF, VERSION AS OF, or @ syntax, after your table identifier. 詳細については、「テーブルの古いスナップショットのクエリ (タイムトラベル) 」を参照してください。See Query an older snapshot of a table (time travel) for details.

ALL

リレーションシップの一致するすべての行を選択します。Select all matching rows from the relation. 既定で有効です。Enabled by default.

DISTINCT

リレーションシップからすべての一致する行を選択し、重複する結果を削除します。Select all matching rows from the relation then remove duplicate results.

WHERE

述語で行をフィルター処理します。Filter rows by predicate.

HAVING

述語によってグループ化された結果をフィルター処理します。Filter grouped result by predicate.

ORDER BY

一連の式の合計順序を強制します。Impose total ordering on a set of expressions. 既定の並べ替え方向は昇順です。Default sort direction is ascending. @No__t_0、`CLUSTER BY、またはDISTRIBUTE BYと共に使用することはできません。</span><span class="sxs-lookup"><span data-stu-id="68f30-117">You cannot use this withSORT BY,CLUSTER BY, orDISTRIBUTE BY`.

DISTRIBUTE BY

一連の式に基づいて、リレーションシップの行を再パーティション分割します。Repartition rows in the relation based on a set of expressions. 同じ式の値を持つ行は、同じワーカーにハッシュされます。Rows with the same expression values will be hashed to the same worker. @No__t_0 または CLUSTER BY と共に使用することはできません。You cannot use this with ORDER BY or CLUSTER BY.

SORT BY

各パーティション内の一連の式に順序を強制します。Impose ordering on a set of expressions within each partition. 既定の並べ替え方向は昇順です。Default sort direction is ascending. @No__t_0 または CLUSTER BY と共に使用することはできません。You cannot use this with ORDER BY or CLUSTER BY.

CLUSTER BY

一連の式に基づいてリレーションシップ内の行を再パーティション分割し、式に基づいて行を昇順に並べ替えます。Repartition rows in the relation based on a set of expressions and sort the rows in ascending order based on the expressions. つまり、これは、すべての式が昇順に並べ替えられた DISTRIBUTE BYSORT BY の短縮形です。In other words, this is a shorthand for DISTRIBUTE BY and SORT BY where all expressions are sorted in ascending order. @No__t_0、`DISTRIBUTE BY、またはSORT BYと共に使用することはできません。</span><span class="sxs-lookup"><span data-stu-id="68f30-126">You cannot use this withORDER BY,DISTRIBUTE BY, orSORT BY`.

WINDOW

ウィンドウの指定に識別子を割り当てます。Assign an identifier to a window specification. ウィンドウ関数」を参照してください。See Window Functions.

LIMIT

返される行の数を制限します。Limit the number of rows returned.

VALUES

リレーションシップから読み取るのではなく、明示的に値を指定します。Explicitly specify values instead of reading them from a relation.

例:Examples:

SELECT * FROM boxes
SELECT width, length FROM boxes WHERE height=3
SELECT DISTINCT width, length FROM boxes WHERE height=3 LIMIT 2
SELECT * FROM VALUES (1, 2, 3) AS (width, length, height)
SELECT * FROM VALUES (1, 2, 3), (2, 3, 4) AS (width, length, height)
SELECT * FROM boxes ORDER BY width
SELECT * FROM boxes DISTRIBUTE BY width SORT BY width
SELECT * FROM boxes CLUSTER BY length

サンプリングSampling

sample:
    | TABLESAMPLE ((integer_expression | decimal_expression) PERCENT)
    : TABLESAMPLE (integer_expression ROWS)

入力データをサンプリングします。Sample the input data. これは、パーセンテージ (0 ~ 100 の範囲で指定する必要があります) または固定数の入力行で表現できます。This can be expressed in terms of either a percentage (must be between 0 and 100) or a fixed number of input rows.

例:Examples:

SELECT * FROM boxes TABLESAMPLE (3 ROWS)
SELECT * FROM boxes TABLESAMPLE (25 PERCENT)

結合Joins

join_relation:
    | relation join_type JOIN relation (ON boolean_expression | USING (column_name[, column_name, ...]))
    : relation NATURAL join_type JOIN relation
join_type:
    | INNER
    | (LEFT|RIGHT) SEMI
    | (LEFT|RIGHT|FULL) [OUTER]
    : [LEFT] ANTI

INNER JOIN

両方のリレーションシップから、一致するすべての行を選択します。Select all rows from both relations where there is match.

OUTER JOIN

両方のリレーションシップからすべての行を選択します。一致するものがない側の null 値が入力されます。Select all rows from both relations, filling with null values on the side that does not have a match.

SEMI JOIN

一致がある SEMI JOIN の横の行のみを選択します。Select only rows from the side of the SEMI JOIN where there is a match. 1つの行が複数の行に一致する場合は、最初の一致だけが返されます。If one row matches multiple rows, only the first match is returned.

LEFT ANTI JOIN

左側の行のうち、右側の行に一致しない行のみを選択します。Select only rows from the left side that match no rows on the right side.

例:Examples:

SELECT * FROM boxes INNER JOIN rectangles ON boxes.width = rectangles.width
SELECT * FROM boxes FULL OUTER JOIN rectangles USING (width, length)
SELECT * FROM boxes NATURAL JOIN rectangles

横ビューLateral View

lateral_view:
    : LATERAL VIEW [OUTER] function_name (expressions)
          table_name [AS (column_name[, column_name, ...])]

テーブル生成関数を使用して、入力行ごとに0個以上の出力行を生成します。Generate zero or more output rows for each input row using a table-generating function. @No__t_0 で使用される最も一般的な組み込み関数は explode です。The most common built-in function used with LATERAL VIEW is explode.

LATERAL VIEW OUTER

関数が0行を返した場合でも、null 値を含む行を生成します。Generate a row with null values even when the function returned zero rows.

例:Examples:

SELECT * FROM boxes LATERAL VIEW explode(Array(1, 2, 3)) my_view
SELECT name, my_view.grade FROM students LATERAL VIEW OUTER explode(grades) my_view AS grade

集計Aggregation

aggregation:
    : GROUP BY expressions [(WITH ROLLUP | WITH CUBE | GROUPING SETS (expressions))]

1つまたは複数の集計関数を使用して、一連の式でグループ化します。Group by a set of expressions using one or more aggregate functions. 一般的な組み込み集計関数には、count、avg、min、max、および sum があります。Common built-in aggregate functions include count, avg, min, max, and sum.

ROLLUP

指定された式の階層レベルごとにグループ化セットを作成します。Create a grouping set at each hierarchical level of the specified expressions. たとえば、たとえば、GROUP BY a, b, c WITH ROLLUPGROUP BY a, b, c GROUPING SETS ((a, b, c), (a, b), (a), ()) に相当します。For instance, For instance, GROUP BY a, b, c WITH ROLLUP is equivalent to GROUP BY a, b, c GROUPING SETS ((a, b, c), (a, b), (a), ()). グループ化セットの合計数は N + 1 になります。 N はグループ式の数です。The total number of grouping sets will be N + 1, where N is the number of group expressions.

CUBE

指定された式のセットの可能な組み合わせごとにグループ化セットを作成します。Create a grouping set for each possible combination of set of the specified expressions. たとえば、GROUP BY a, b, c WITH CUBEGROUP BY a, b, c GROUPING SETS ((a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ()) と同じです。For instance, GROUP BY a, b, c WITH CUBE is equivalent to GROUP BY a, b, c GROUPING SETS ((a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ()). グループ化セットの合計数は 2^N になります。 N はグループ式の数です。The total number of grouping sets will be 2^N, where N is the number of group expressions.

GROUPING SETS

グループ化セットに指定されているグループ式の各サブセットに対して、group by を実行します。Perform a group by for each subset of the group expressions specified in the grouping sets. たとえば、GROUP BY x, y GROUPING SETS (x, y)GROUP BY yGROUP BY x 和集合の結果と同じです。For instance, GROUP BY x, y GROUPING SETS (x, y) is equivalent to the result of GROUP BY x unioned with that of GROUP BY y.

例:Examples:

SELECT height, COUNT(*) AS num_rows FROM boxes GROUP BY height
SELECT width, AVG(length) AS average_length FROM boxes GROUP BY width
SELECT width, length, height FROM boxes GROUP BY width, length, height WITH ROLLUP
SELECT width, length, avg(height) FROM boxes GROUP BY width, length GROUPING SETS (width, length)

ウィンドウ関数Window Functions

window_expression:
  : expression OVER window_spec

named_window:
  : window_identifier AS window_spec

window_spec:
  | window_identifier
  : ((PARTITION|DISTRIBUTE) BY expressions
        [(ORDER|SORT) BY sort_expressions] [window_frame])

window_frame:
  | (RANGE|ROWS) frame_bound
  : (RANGE|ROWS) BETWEEN frame_bound AND frame_bound

frame_bound:
  | CURRENT ROW
  | UNBOUNDED (PRECEDING|FOLLOWING)
  : expression (PRECEDING|FOLLOWING)

入力行の範囲に対して結果を計算します。Compute a result over a range of input rows. ウィンドウ式は OVER キーワードを使用して指定されます。その後に、ウィンドウの識別子 (WINDOW キーワードを使用して定義) またはウィンドウの指定のいずれかが続きます。A windowed expression is specified using the OVER keyword, which is followed by either an identifier to the window (defined using the WINDOW keyword) or the specification of a window.

PARTITION BY

@No__t_0 によって別名が設定された、同じパーティションに含まれる行を指定します。Specify which rows will be in the same partition, aliased by DISTRIBUTE BY.

ORDER BY

ウィンドウパーティション内の行の順序付け方法を指定します。 SORT BY によってエイリアスが設定されます。Specify how rows within a window partition are ordered, aliased by SORT BY.

RANGE bound

式の値の範囲に基づいてウィンドウのサイズを表現します。Express the size of the window in terms of a value range for the expression.

ROWS bound

現在の行の前または後の行の数に基づいてウィンドウのサイズを表現します。Express the size of the window in terms of the number of rows before and/or after the current row.

CURRENT ROW

現在の行をバインド済みとして使用します。Use the current row as a bound.

UNBOUNDED

下限または無限大として負の無限大を使用します。Use negative infinity as the lower bound or infinity as the upper bound.

PRECEDING

@No__t_0 バインドと共に使用する場合は、値の範囲の下限を定義します。If used with a RANGE bound, this defines the lower bound of the value range. @No__t_0 バインドと共に使用すると、現在の行がウィンドウに保持される前の行の数が決まります。If used with a ROWS bound, this determines the number of rows before the current row to keep in the window.

FOLLOWING

@No__t_0 バインドと共に使用する場合は、値の範囲の上限を定義します。If used with a RANGE bound, this defines the upper bound of the value range. @No__t_0 バインドと共に使用すると、現在の行の後、ウィンドウに保持する行の数を決定します。If used with a ROWS bound, this determines the number of rows after the current row to keep in the window.

ヒントHints

hints:
  : /*+ hint[, hint, ...] */
  hint:
    : hintName [(expression[, expression, ...])]

ヒントを使用すると、Spark がクエリをより適切に実行するのに役立ちます。Hints can be used to help Spark execute a query better. たとえば、テーブルがブロードキャストに十分な大きさであることをヒントに示すことができます。これにより、結合が高速化されます。For example, you can hint that a table is small enough to be broadcast, which would speed up joins. /* +... */ コメントブロック内の SELECT ステートメントに1つ以上のヒントを追加します。You add one or more hints to a SELECT statement inside /*+ … */ comment blocks. 同じコメントブロック内に複数のヒントを指定できます。この場合、ヒントはコンマで区切られ、そのようなコメントブロックは複数存在する可能性があります。Multiple hints can be specified inside the same comment block, in which case the hints are separated by commas, and there can be multiple such comment blocks. ヒントには名前 (たとえば、BROADCAST) があり、0個以上のパラメーターを受け取ります。A hint has a name (for example, BROADCAST) and accepts 0 or more parameters.

例:Examples:

SELECT /*+ BROADCAST(customers) */ * FROM customers, orders WHERE o_custId = c_custId
SELECT /*+ SKEW('orders') */ * FROM customers, orders WHERE o_custId = c_custId
SELECT /*+ SKEW('orders'), BROADCAST(demographic) */ * FROM orders, customers, demographic WHERE o_custId = c_custId AND c_demoId = d_demoId

@No__t_1 ヒントの詳細については、「傾斜結合の最適化」も参照してください。See also Skew Join Optimization for more information about the SKEW hint.