适用于:
Databricks SQL
Databricks Runtime
从一个或多个表格引用组成一个结果集。
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子句中必须没有其他表引用。 -
与生成器函数(例如
EXPLODE)结合使用,将生成包含一个或多个行的虚拟表。LATERAL VIEW将行应用于每个原始输出行。在 Databricks SQL 中,以及从 Databricks Runtime 12.2 开始,此子句已弃用。 应以 table_reference 的形式调用表值生成器函数。
-
根据提供的谓词筛选
FROM子句的结果。 -
用于对行进行分组的表达式。 它与聚合函数(
MIN、MAX、COUNT、SUM、AVG)结合使用,基于分组表达式和每个组中的聚合值对行进行分组。 将FILTER子句附加到聚合函数时,只会将匹配的行传递给该函数。 -
用于筛选由
GROUP BY生成的行的谓词。HAVING子句用于在执行分组后对行进行筛选。 如果指定的HAVING不带GROUP BY,则表示不带分组表达式的GROUP BY(全局聚合)。 -
用于筛选窗口函数结果的谓词。 要使用
QUALIFY,SELECT 列表或 QUALIFY 子句中必须至少有一个窗口函数。
Delta 表上的 Select
除标准 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 在 @ 后指定版本。 例如,若要查询表 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