表引用 (table reference)
适用于: Databricks SQL Databricks Runtime
表引用是 SQL 中的中间结果表。 它可以从其他运算符(例如函数、联接或子查询)派生、直接引用基表,或构造为内联表。
语法
table_reference
{ table_name [ TABLESAMPLE clause ] [ table_alias ] |
{ STREAM table_name [ table_alias ] | STREAM ( table_name ) [ table_alias ] } |
view_name [ table_alias ] |
JOIN clause |
PIVOT clause |
UNPIVOT clause |
[ STREAM ] table_valued_function [ table_alias ] |
[ LATERAL ] table_valued_function [ table_alias ] |
VALUES clause |
[ LATERAL ] ( query ) [ TABLESAMPLE clause ] [ table_alias ] }
参数
-
标识一个可能包含时态规范的表。 有关详细信息,请参阅使用 Delta Lake 表历史记录。
如果找不到表,Azure Databricks 会引发 TABLE_OR_VIEW_NOT_FOUND 错误。
有关名称解析的详细信息,请参阅列、字段、参数和变量解析。
适用于:** Databricks SQL Databricks Runtime 16.0 及更高版本
table_name
可能包含选项规范。 -
标识视图或通用表表达式 (CTE)。 如果找不到视图,Azure Databricks 会引发 TABLE_OR_VIEW_NOT_FOUND 错误。
有关名称解析的详细信息,请参阅列、字段、参数和变量解析。
STREAM
返回表或表值函数作为流式处理源。 与
STREAM
关键字一起使用时,不能为表提供时态规范。 流式处理源最常用于流式处理表的定义中。-
使用联接合并两个或多个关系。
-
适用于: Databricks SQL Databricks Runtime 12.2 LTS 及更高版本。
用于数据透视;可根据特定的列值获取聚合值。
-
适用于: Databricks SQL Databricks Runtime 12.2 LTS 及更高版本。
用于数据透视;可将多个列组拆分为行。
[LATERAL] table_valued_function_invocation
调用表值函数。 若要引用同一
table_reference
子句中前面FROM
所显示的列,必须指定LATERAL
。-
定义内联表。
[LATERAL] ( query )
使用查询计算表引用。 以
LATERAL
为前缀的查询可能会引用同一FROM
子句中前面的table_reference
公开的列。 此类构造称为相关查询或依赖查询。-
(可选)通过只对部分行进行采样来减小结果集的大小。
table_alias
(可选)为
table_reference
指定一个标签。 如果table_alias
包含column_identifier
,其数字必须与table_reference
中的列数匹配。
选择 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
示例
-- Return a data set from a storage location using a credential.
> SELECT * FROM `csv`.`spreadsheets/data.csv` WITH(CREDENTIAL some_credential);
-- Select from a jdbc data source while controlling the fetch size.
> SELECT * FROM jdbcTable WITH(fetchSize = 0);
-- 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