適用対象:
Databricks SQL
Databricks Runtime
1 つ以上のテーブル参照から結果セットを作成します。
SELECT 句は、共通テーブル式 (CTE)、セット操作、およびその他のさまざまな句をさらに含むクエリの一部にすることができます。
構文
SELECT 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 } [, ...] )
パラメーター
-
式、集計、重複除去の実行など、サブクエリから返される列を収集します。
-
SELECTの入力のソース。 この入力参照は、参照の前にSTREAMキーワードを使用してストリーミング参照に変換できます。table_referenceがメトリック ビューの場合は、FROM句に他のテーブル参照が存在しない必要があります。 -
1 つ以上の行を含む仮想テーブルを生成する、
EXPLODEなどのジェネレーター関数と組み合わせて使用されます。LATERAL VIEWでは行は元の各出力行に適用されます。Databricks SQL と Databricks Runtime 12.2 以降では、この句は非推奨になっています。 table valued generator 関数は、table_reference として呼び出す必要があります。
-
指定された述語に基づいて
FROM句の結果をフィルター処理します。 -
行をグループ化するために使用される式。 これは、集計関数 (
MIN、MAX、COUNT、SUM、AVG) と共に使用して、グループ化式に基づいて行をグループ化し、各グループの値を集計します。FILTER句が集計関数に関連付けられている場合は、一致する行だけがその関数に渡されます。 -
GROUP BYによって生成される行のフィルター処理に使用する述語。HAVING句は、グループ化が実行された後に行をフィルター処理するために使用されます。HAVINGを指定せずにGROUP BYを指定すると、グループ化式のないGROUP BY(グローバル集計) を示します。 -
ウィンドウ関数の結果をフィルター処理するために使用される述語。
QUALIFYを使用するには、 リストまたは SELECT 句に少なくとも 1 つの QUALIFY が存在する必要があります。
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 hoursdate_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 の後にバージョンを指定できます。 たとえば、テーブル 123 のバージョン events を照会するには、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