适用于: Databricks SQL
 Databricks SQL  Databricks Runtime
 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