SELECT
適用対象: Databricks SQL Databricks Runtime
1 つ以上のテーブル参照から結果セットを作成します。
SELECT
句は、共通テーブル式 (CTE)、セット操作、およびその他のさまざまな句をさらに含むクエリの一部にすることができます。
構文
SELECT [ hints ] [ ALL | DISTINCT ] { named_expression | star_clause } [, ...]
FROM table_reference [, ...]
[ LATERAL VIEW clause ]
[ WHERE clause ]
[ GROUP BY clause ]
[ HAVING clause]
[ QUALIFY clause ]
named_expression
expression [ column_alias ]
star_clause
[ { table_name | view_name } . ] * [ except_clause ]
except_clause
EXCEPT ( { column_name | field_name } [, ...] )
パラメーター
-
ヒントを使用すると、Azure Databricks オプティマイザーでの計画上の決定をより適切に行うことができます。 Azure Databricks は、結合方法とデータのパーティション再分割の選択に影響するヒントをサポートしています。
ALL
テーブル参照から一致するすべての行を選択します。 既定で有効です。
DISTINCT
重複する結果を削除したら、テーブル参照から一致する行をすべて選択します。
named_expression
省略可能な割り当てられた名前を持つ式。
-
1 つの値に評価される 1 つ以上の値、演算子、SQL 関数の組み合わせ。
-
式の結果の名前を指定する省略可能な列識別子。
column_alias
が指定されていない場合、Databricks SQL から派生されます。
-
-
FROM
句内の参照可能なすべての列、または特定のテーブル参照でのFROM
句内の列またはフィールドに名前を付ける短縮形。 -
SELECT
の入力のソース。 この入力参照は、参照の前にSTREAM
キーワードを使用してストリーミング参照に変換できます。 -
1 つ以上の行を含む仮想テーブルを生成する、
EXPLODE
などのジェネレーター関数と組み合わせて使用されます。LATERAL VIEW
では行は元の各出力行に適用されます。Databricks SQL と Databricks Runtime 12.2 以降では、この句は非推奨になっています。 テーブル値ジェネレーター関数は、table_reference として呼び出す必要があります。
-
指定された述語に基づいて
FROM
句の結果をフィルター処理します。 -
行をグループ化するために使用される式。 これは、集計関数 (
MIN
、MAX
、COUNT
、SUM
、AVG
) と共に使用して、グループ化式に基づいて行をグループ化し、各グループの値を集計します。FILTER
句が集計関数に関連付けられている場合は、一致する行だけがその関数に渡されます。 -
GROUP BY
によって生成される行のフィルター処理に使用する述語。HAVING
句は、グループ化が実行された後に行をフィルター処理するために使用されます。GROUP BY
を指定せずにHAVING
を指定すると、グループ化式のないGROUP BY
(グローバル集計) を示します。 -
ウィンドウ関数の結果をフィルター処理するために使用される述語。
QUALIFY
を使用するには、SELECT リストまたは QUALIFY 句に少なくとも 1 つのウィンドウ関数が存在する必要があります。
Delta テーブルでの選択
標準の SELECT
オプションに加えて、Delta テーブルでは、このセクションで説明するタイム トラベル オプションがサポートされています。 詳細については、「Delta Lake テーブル履歴を操作する」を参照してください。
AS OF
の構文
table_identifier TIMESTAMP AS OF timestamp_expression
table_identifier VERSION AS OF version
timestamp_expression
には次のいずれかを指定できます。'2018-10-18T22:15:12.013Z'
、つまり、タイムスタンプにキャストできる文字列ですcast('2018-10-18 13:36:32 CEST' as timestamp)
'2018-10-18'
、つまり、日付文字列ですcurrent_timestamp() - interval 12 hours
date_sub(current_date(), 1)
- タイムスタンプにキャストされる (できる) その他の式
version
は、DESCRIBE HISTORY table_spec
の出力から取得できる long 型の値です。
timestamp_expression
も version
もサブクエリにすることはできません。
例
> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
> SELECT * FROM events VERSION AS OF 123
@
構文
タイムスタンプまたはバージョンを指定するには、@
構文を使用します。 タイムスタンプは yyyyMMddHHmmssSSS
形式である必要があります。 バージョンの前に v
を付加することで、@
の後にバージョンを指定できます。 たとえば、テーブル events
のバージョン 123
を照会するには、events@v123
を指定します。
例
> SELECT * FROM events@20190101000000000
> SELECT * FROM events@v123
例
-- select all referencable columns from all tables
> SELECT * FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
1 2 3 4
-- select all referencable columns from one table
> SELECT t2.* FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
3 4
-- select all referencable columns from all tables except t2.c4
> SELECT * EXCEPT(c4) FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
1 2 3
-- select all referencable columns from a table, except a nested field.
> SELECT * EXCEPT(c2.b) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
1 { "a" : 2 }
-- Removing all fields results in an empty struct
> SELECT * EXCEPT(c2.b, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
1 { }
-- Overlapping names result in an error
> SELECT * EXCEPT(c2, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
Error: EXCEPT_OVERLAPPING_COLUMNS