适用于:
Databricks SQL
Databricks Runtime
从一个或多个
表格引用
组成一个结果集。
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 } [, ...] )
提示可帮助 Databricks SQL 优化器作出更好的计划决策。 Databricks SQL 支持使用会影响联接策略的选择和数据的重新分区的提示。
选择表格引用中的所有匹配行。 默认情况下启用。
DISTINCT
删除结果中的重复项后,从表格引用中选择所有匹配行。
named_expression
具有可选指定名称的表达式。
expression
计算得出值的一个或多个值、运算符和 SQL 函数的组合。
column_alias
为表达式结果命名的可选列标识符。
如果未提供 column_alias
,Databricks SQL 会派生一个。
star_clause
用于命名 FROM
子句中所有可引用列的简写。
列的列表按 table_reference
的顺序和每个 table_reference
中的列的顺序排序。
此列表不包含 _metadata 列。
必须显式引用它。
table_name
如果存在,则将要命名的列限制为指定可引用表中的列。
view_name
如果指定,则将要扩展的列限制为指定可引用视图中的列。
except_clause
适用于: Databricks SQL Databricks Runtime 11.0 及更高版本
可以选择从 select_star
子句中标识的可引用列集中删除列或字段。
column_name
可引用的一组列中的一列。
field_name
对可引用的一组列所包含的列中字段的引用。 如果从 STRUCT
中排除所有字段,则结果为空的 STRUCT
。
每个名称都必须引用可引用的一组列中包含的列或其字段。 否则,Databricks SQL 会引发 UNRESOLVED_COLUMN 错误。
如果名称重叠或不是唯一的,Databricks SQL 会引发 EXCEPT_OVERLAPPING_COLUMNS 错误。
table_reference
SELECT
的输入源。
LATERAL VIEW
与生成器函数(例如 EXPLODE
)结合使用,将生成包含一个或多个行的虚拟表。 LATERAL VIEW
将行应用于每个原始输出行。
WHERE
根据提供的谓词筛选 FROM
子句的结果。
GROUP BY
用于对行进行分组的表达式。 它与聚合函数(MIN
、MAX
、COUNT
、SUM
、AVG
)结合使用,基于分组表达式和每个组中的聚合值对行进行分组。 将 FILTER
子句附加到聚合函数时,只会将匹配的行传递给该函数。
HAVING
用于筛选由 GROUP BY
生成的行的谓词。 HAVING
子句用于在执行分组后对行进行筛选。 如果指定的 HAVING
不带 GROUP BY
,则表示不带分组表达式的 GROUP BY
(全局聚合)。
QUALIFY
用于筛选窗口函数结果的谓词。
要使用 QUALIFY
,SELECT 列表或 QUALIFY 子句中必须至少有一个窗口函数。
选择 Delta 表
除标准 SELECT
选项外,Delta 表还支持本部分中介绍的按时间顺序查看选项。 有关详细信息,请参阅使用 Delta Lake 表历史记录。
AS OF
语法
table_identifier TIMESTAMP AS OF timestamp_expression
table_identifier VERSION AS OF version
timestamp_expression
可以是下列项中的任意一项:> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
> SELECT * FROM delta.`/mnt/delta/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
CLUSTER BY 子句
公用表表达式 (CTE)
DISTRIBUTE BY 子句
GROUP BY 子句
HAVING 子句
QUALIFY 子句
VALUES 子句
LATERAL VIEW 子句
LIMIT 子句
OFFSET 子句
ORDER BY 子句
PIVOT 子句
TABLESAMPLE 子句
set 运算符
SORT BY 子句
表值函数 (TVF)
UNPIVOT 子句
WHERE 子句
WINDOW 子句