保留字和架构
适用于: Databricks SQL Databricks Runtime
保留字是 SQL 语言用作关键字的文本,不应将其用作标识符,以避免意外的行为。
保留的架构名称对 Azure Databricks 具有特殊意义。
保留字
Azure Databricks 未正式禁止将任何特定文本用作标识符。
但是,若要将以下任何标识符列表用作表别名,必须使用反勾号 (`) 将名称包围起来。
- ANTI
- CROSS
- EXCEPT
- FULL
- INNER
- INTERSECT
- JOIN
- LATERAL
- LEFT
- MINUS
- NATURAL
- ON
- RIGHT
- SEMI
- UNION
- USING
表达式中的特殊字
以下标识符列表可在任意位置使用,但 Azure Databricks 优先将其视为特定上下文中表达式中的关键字:
NULL
SQL
NULL
值。DEFAULT
指示列默认值。
TRUE
SQL 布尔
true
值。FALSE
SQL 布尔
false
值。LATERAL
用作列限定符以指示显式横向关联。
使用反勾号(NULL
和 DEFAULT
)或使用表名或别名限定列名。
Azure Databricks 使用 CURRENT_
前缀来引用某些配置设置或其他上下文变量。
下划线 (_
) 前缀用于 Azure Databricks 伪列。
在 Databricks Runtime 中,现有的伪列是 _metadata 列。
不会优先处理带有这些前缀的标识符。 但是,请避免使用这些前缀的列或列别名,以避免意外的行为。
保留的目录名称
Azure Databricks 保留以下目录名称列表供当前或将来使用:
- 以
SYS
开头的目录名称 - 以
DATABRICKS
开头的目录名称
避免使用这些名称。
保留的架构名称
Azure Databricks 保留以下架构名称列表供当前或将来使用:
BUILTIN
将来用于限定内置函数。
SESSION
将来用于限定临时视图和函数。
INFORMATION_SCHEMA
保存 SQL 标准信息架构。
以
SYS
或DATABRICKS
开头的架构名称
避免使用这些名称。
ANSI 保留字
Azure Databricks 不强制使用 ANSI 保留字。 以下 SQL2016 关键字列表仅供参考。
A
ALL、ALTER、AND、ANY、ARRAY、AS、AT、AUTHORIZATION
B
BETWEEN、BOTH、BY
C
CASE、CAST、CHECK、COLLATE、COLUMN、COMMIT、CONSTRAINT、CREATE、CROSS、CUBE、CURRENT、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、CURRENT_USER
D
DELETE、DESCRIBE、DISTINCT、DROP
E
ELSE、END、ESCAPE、EXCEPT、EXISTS、EXTERNAL、EXTRACT
F
FALSE、FETCH、FILTER、FOR、FOREIGN、FROM、FULL、FUNCTION
G
GLOBAL、GRANT、GROUP、GROUPING
H
HAVING
I
IN、INNER、INSERT、INTERSECT、INTERVAL、INTO、IS
J
JOIN
L
LEADING、LEFT、LIKE、LOCAL
N
NATURAL、NO、NOT、NULL
O
OF、ON、ONLY、OR、ORDER、OUT、OUTER、OVERLAPS
P
PARTITION、POSITION、PRIMARY
R
RANGE、REFERENCES、REVOKE、RIGHT、ROLLBACK、ROLLUP、ROW、ROWS
S
SELECT、SESSION_USER、SET、SOME、START
T
TABLE、TABLESAMPLE、THEN、TIME、TO、TRAILING、TRUE、TRUNCATE
U
UNION、UNIQUE、UNKNOWN、UPDATE、USER、USING
V
VALUES
W
WHEN、WHERE、WINDOW、WITH
示例
-- Using SQL keywords
> CREATE TEMPORARY VIEW where(where) AS (VALUES (1));
> SELECT where from FROM where select;
1
-- Usage of NULL
> SELECT NULL, `null`, T.null FROM VALUES(1) AS T(null);
NULL 1 1
-- current_date is eclipsed by the column alias T.current_date
> SELECT (SELECT current_date), current_date, current_date()
FROM VALUES(1) AS T(current_date);
2021-10-23 1 2021-10-23
-- Reserved keyword ANTI cannot be used as table alias
> SELECT * FROM VALUES(1) AS ANTI;
Error in query: no viable alternative at input 'ANTI'
> SELECT * FROM VALUES(1) AS `ANTI`;
1