名称
适用于: Databricks SQL Databricks Runtime
标识 Azure Databricks 中的不同类型的对象。
以下限制适用于 Unity Catalog 中的所有对象名称:
- 对象名称不能超过 255 个字符。
- 不允许使用以下特殊字符:
- 句点 (
.
) - 空格 (
- 正斜杠 (
/
) - 所有 ASCII 控制字符(00-1F 十六进制)
- DELETE 字符(7F 十六进制)
- 句点 (
- Unity Catalog 将所有对象名称存储为小写。
- 在 SQL 中引用 UC 名称时,必须使用反引号来转义包含特殊字符的名称,例如连字符 (
-
)。
注意
列名称可以使用特殊字符,但如果使用了特殊字符,则必须在所有 SQL 语句中使用反引号对名称进行转义。 Unity Catalog 保留列名大小写,但对 Unity Catalog 表的查询不区分大小写。
连接名称
标识外部连接。
外部连接充当外部系统的链接(例如 PostgreSQL
),然后可用于引用其目录、架构和表。
语法
connection_identifier
parameters
- connection_identifier:唯一标识连接的标识符。
示例
> CREATE CONNECTION my_postgresql ...;
目录名称
标识目录。 目录提供对象的分组,这些对象可以进一步细分为架构。
语法
catalog_identifier
参数
- catalog_identifier:唯一标识目录的标识符。
示例
> USE CATALOG hive_metastore;
> CREATE CATALOG mycatalog;
-- Creating a catalog with a special character requires back ticks
> CREATE CATALOG `cat-a-log`;
-- Creating a catalog with non ASCII characters requires back ticks
> USE `目录`;
-- space (' '), '/', and '.' are not allowed in catalog names, even with back ticks.
> CREATE CATALOG `cat a log`;
ERROR
架构名称
标识架构。 架构在目录中提供对象的分组。
语法
{ [ catalog_name . ] schema_identifier |
IDENTIFIER clause }
参数
- catalog_name:现有目录的名称。
- schema_identifier:唯一标识架构的标识符。
- IDENTIFIER 子句:将常量
STRING
映射为架构名称。
hive_metastore
中创建的架构只能包含字母数字 ASCII 字符和下划线 (INVALID_SCHEMA_OR_RELATION_NAME)。
示例
> USE SCHEMA default;
> CREATE SCHEMA my_sc;
-- In Hive Metastore, schema names must only consist of ASCII letters, digits and '_'
> CREATE SCHEMA hive_metastore.`a-b`;
Error: INVALID_SCHEMA_OR_RELATION_NAME
-- In Unity Catalog only space (' '), '/', and '.' are not allowed
> CREATE SCHEMA main.`a-b`;
> CREATE SCHEMA `a b`;
Error
-- Use back-ticks to reference or create schemas in Unity Catalog with non-ASCII characters
> CREATE SCHEMA `数据库架构`;
数据库名称
架构名称的同义词。
虽然使用 SCHEMA
和 DATABASE
是可互换的,但最好使用 SCHEMA
。
表名称
标识一个表对象。 该表可以使用架构名称进行限定,或使用简单标识符来进行取消限定。
语法
{ [ schema_name . ] table_identifier |
IDENTIFIER clause |
{ file_format | `file_format` } . `path_to_table` } [ temporal_spec ] [ options_spec ] }
temporal_spec
{
@ timestamp_encoding |
@V version |
[ FOR ] { SYSTEM_TIMESTAMP | TIMESTAMP } AS OF timestamp_expression |
[ FOR ] { SYSTEM_VERSION | VERSION } AS OF version
}
options_spec
WITH ( { option_key [ = ] option_val } [, ...] )
option_key
{ identifier [. ...] | string_literal }
参数
schema_name:包含表的限定或非限定架构名称。
table_identifier:指定表或 table_alias 的名称的标识符。
file_format:
json
、csv
、avro
、parquet
、orc
、binaryFile
、text
、delta
之一(不区分大小写)。path_to_table:表在文件系统中的位置。 必须具有
ANY_FILE
权限才能使用此语法。IDENTIFIER 字句:将常量
STRING
映射为表名称。temporal_spec:在使用时,在指定时间点或按指定版本引用 Delta 表。
只能在查询或 MERGE USING 的上下文中使用时间规范。
- @ timestamp_encoding:用
yyyyMMddHHmmssSSS
格式对时间戳进行编码的正 Bigint 文本。 - @V 版本:标识 Delta 表版本的正整数文本。
- timestamp_expression:计算结果为 TIMESTAMP 的简单表达式。
timestamp_expressiom
必须是常量表达式,但可以包含current_date()
或current_timestamp()
。 - 版本:标识 Delta 表版本的整数文本或字符串文本。
- @ timestamp_encoding:用
option_spec:使用时定义要传递给数据源的指令,例如凭据来访问存储位置或
'write.split-size'
控制INSERT
行为。option_key
选项键。 该键可以由一个或多个以点分隔的标识符或一个字符串字面量组成。
选项键必须唯一,且区分大小写。
option_val
选项的值。 类型
BOOLEAN
、STRING
或INTEGER
DECIMAL
类型的常量表达式。
hive_metastore
中创建的表只能包含字母数字 ASCII 字符和下划线 (INVALID_SCHEMA_OR_RELATION_NAME)。
如果名称未限定并且未引用已知的表别名,则 Azure Databricks 首先尝试解析当前架构中的表。
如果名称由架构限定,Azure Databricks 将尝试解析当前目录中的表。
有关名称解析的详细信息,请参阅 表和视图解析。
如果对不属于 Delta Lake 格式的表使用 temporal_spec
,Azure Databricks 将引发错误。
示例
-- A back quoted table name
> SELECT * FROM `Employees`;
-- A table name without back quotes
> SELECT * FROM employees;
-- A schema qualified table name
> SELECT * FROM hr.employees;
-- A schema qualified table name with back quotes for schema and table
> SELECT * FROM `hr`.`employees`;
-- A fully qualified table name
> SELECT * FROM hive_metastore.default.tab;
-- A reference to an information schema table.
> SELECT * FROM system.information_schema.columns;
-- Referencing a path as a table requires back ticks
> SELECT * FROM delta.`somedir/delta_table`;
> SELECT * FROM `csv`.`spreadsheets/data.csv`;
> SELECT * FROM `csv`.`spreadsheets/data.csv` WITH (CREDENTIAL some_credential)
> INSERT INTO t WITH ('write.split-size' 10) SELECT * FROM s;
-- Tables in `hive_metastore` can only contain alphanumeric ASCII characters and underscores
> CREATE TABLE hive_metastore.default.t1(c1 INT);
> CREATE TABLE hive_metastore.default.`表一`(c1 INT);
Error: INVALID_SCHEMA_OR_RELATION_NAME
-- Use back-ticks to reference or create tables in Unity Catalog with non ASCII characters
> CREATE TABLE main.`瑞赛奇`.`表一`(c1 INT);
视图名称
标识视图。 该视图可以使用架构名称进行限定,或使用简单标识符来进行取消限定。
语法
{ [ schema_name . ] view_identifier |
IDENTIFIER clause }
参数
- schema_name:包含视图的架构的限定名称或非限定名称。
- view_identifier :指定视图名称的标识符或 CTE 的视图标识符。
- IDENTIFIER 子句:将常量
STRING
映射为视图名称。
hive_metastore
中创建的视图只能包含字母数字 ASCII 字符和下划线 (INVALID_SCHEMA_OR_RELATION_NAME)。
示例
-- A back quoted view name
> SELECT * FROM `Employees`;
-- A view name without back quotes
> SELECT * FROM employees;
-- A schema qualified view name
> SELECT * FROM hr.employees;
-- A schema qualified view name with back quotes for schema and table
> SELECT * FROM `hr`.`employees`;
-- A fully qualified view name
> SELECT * FROM hive_metastore.default.tab;
-- Views in `hive_metastore` can only contain alphanumeric ASCII characters and underscores
> CREATE VIEW hive_metastore.default.v1(c1) AS SELECT 1;
> CREATE VIEW hive_metastore.default.`数据库视图一`(c1 INT);
Error: INVALID_SCHEMA_OR_RELATION_NAME
-- Use back-ticks to reference or create tables in Unity Catalog with non ASCII characters
> CREATE VIEW main.`瑞赛奇`.`数据库视图一`(c1) AS SELECT 1;
列名
标识表或视图中的列。 该列可以使用表或视图名称进行限定,或使用简单标识符来进行非限定 。
语法
{ [ { table_name | view_name } . ] column_identifier |
IDENTIFIER clause }
参数
- table_name :包含列的表的限定或非限定表名。
- view_name :包含列的视图的限定或非限定视图名称。
- column_identifier :指定列名称的标识符。
- IDENTIFIER 子句:将常量
STRING
映射为列名称。
标识的列必须位于表或视图中。
Azure Databricks 支持特殊的 _metadata 列。 此 struct 类型的伪列是每个表的一部分,可以用于检索关于表中行的元数据信息。
警告
如果表架构包含名为 _metadata
的列,则查询将从数据源返回该列,而不是文件元数据。 _metadata
伪列将不可访问。
没有列映射属性 ('delta.columnMapping.mode' = 'name'
) 的 Delta Lake 表的列名称不得包含以下字符:' '
(空格)、','
、';'
、'{'
、'}'
、'('
、')'
。 '\n'
、 '\t'
和 '='
。
AVRO
表中的列名称必须以 '_'
或 Unicode 字母(包括非 ASCII 字母)开头,后跟 '_'
、Unicode 字母和数字的组合。
示例
-- An unqualified column name
> SELECT c1 FROM VALUES(1) AS T(c1);
c1
1
-- A qualified column name
> SELECT T.c1 FROM VALUES(1) AS T(c1);
c1
1
-- Using _metadata to retrieve information about rows retrieved from T.
> CREATE TABLE T(c1 INT);
> INSERT INTO T VALUES(1);
> SELECT T._metadata.file_size;
574
-- A delimited column name
> CREATE TABLE T(`sütun1`);
字段名称
标识 struct 内的字段。 该字段必须限定为包含该字段的结构的路径。
语法
{ expr { . field_identifier [. ...] } |
IDENTIFIER clause }
parameters
- expr:struct 类型的表达式。
- field_identifier:指定字段名称的标识符。
- IDENTIFIER 子句:将常量
STRING
映射为字段名称。
可以通过沿根 struct 的路径指定字段标识符来引用深度嵌套的字段。
没有列映射属性 ('delta.columnMapping.mode' = 'name'
) 的 Delta Lake 表的字段名称不得包含以下字符:' '
(空格)、','
、';'
、'{'
、'}'
、'('
、')'
。 '\n'
、 '\t'
和 '='
。
AVRO
表中的字段名称必须以 '_'
或 Unicode 字母(包括非 ASCII 字母)开头,后跟 '_'
、Unicode 字母和数字的组合。
示例
> SELECT addr.address.name
FROM VALUES (named_struct('address', named_struct('number', 5, 'name', 'Main St'),
'city', 'Springfield')) as t(addr);
Main St
-- Delimited field names with non ASCII letters
> CREATE TABLE T(c1 struct<`атрибут1` INT, `атрибут2`>);
> SELECT c1.`атрибут1` FROM T;
变量名称
标识临时(会话)变量。
该变量可以使用架构名称(system.session
或 session
)进行限定,或使用简单标识符进行取消限定。
语法
{ [ schema_name . ] variable_identifier |
IDENTIFIER clause }
parameters
- schema_name:包含所有临时变量的
system.session
或session
。 - variable_identifier:一个指定变量名称的标识符。
示例
-- Declaring a session variable with a qualified name.
> DECLARE session.myvar = 5;
-- Setting a session variable with an unqualified name.
> SET VAR myvar = 6
-- Declaring a session variable with a fully qualified name an non-ASCII characters.
> DECLARE system.session.`圆周率` = 3.14;
函数名称
标识一个函数。 该函数可以使用架构名称进行限定,或使用简单标识符来进行取消限定。
语法
{ [ schema_name . ] function_identifier |
IDENTIFIER clause }
参数
- schema_name:包含函数的架构的限定名称或非限定名称。
- function_identifier :指定函数名称的标识符。
- IDENTIFIER 子句:将常量
STRING
映射为函数名称。
hive_metastore
中创建的函数只能包含字母数字 ASCII 字符和下划线。
示例
-- Creating a SQL function with a qualified name
> CREATE FUNCTION math.myplus(x INT, y INT) RETURN x + y;
-- Invoking a function with an unqualified name
> SELECT myplus()
-- Creating a SQL function with non-ASCII characters;
> CREATE FUNCTION `圆周率`() RETURN 3.14;
参数名称
标识 SQL 用户定义的函数 (SQL UDF) 主体中的参数。 该函数可以使用函数标识符进行限定,或使用简单标识符来进行取消限定。
语法
[ function_identifier . ] parameter_identifier
参数
- function_identifier:指定函数名称的标识符。
- parameter_identifier:指定参数名称的标识符。
示例
-- Create a function with undelimited parameters and reference them as qualified and nonqualified.
> CREATE FUNCTION area(x INT, y INT) RETURNS INT
RETURN area.x + y;
-- Create a function with non-ASCII character parameters
> CREATE FUNCTION full_name(`prénom` STRING, `nom` STRING) RETURNS STRING
RETURN `prénom` + ' ' + `nom`;
表别名
为表引用、查询、表函数或其他形式的关系标记。
语法
[ AS ] table_identifier [ ( column_identifier1 [, ...] ) ]
参数
- table_identifier :指定表名称的标识符。
- column_identifierN :指定列名称的可选标识符。
如果提供列标识符,则它们的编号必须与匹配关系中的列数匹配。
如果不提供列标识符,它们的名称将从标记关系继承。
示例
-- Defining a table alias with column list
> SELECT a, b FROM VALUES (1, 2) AS t(a, b);
a b
1 2
-- Defining a table alias without column list
> DELETE FROM emp AS e WHERE e.c1 = 5;
-- Defining a table alias with non ASCII characters
> SELECT * FROM employee AS `직원`;
列别名
在 SELECT
列表中标记表达式的结果以供参考。
如果表达式是表值生成器函数,则别名标记生成列的列表。
语法
[AS] column_identifier
[AS] ( column_identifier [, ...] )
参数
- column_identifier :指定列名称的标识符。
尽管列别名在选择列表中不需要是唯一,但需要唯一性来通过名称引用别名。
示例
-- An undelimited alias
> SELECT 1 AS a;
a
1
> SELECT 1 a, 2 b;
a b
1 2
-- A delimited alias with non-ASCII characters
> SELECT 3.14 AS `圆周率`;
a
1
-- Referencing a passed column alias
> SELECT a + a FROM (SELECT 1 AS a);
a
2
凭据名称
标识凭证,以便使用提供程序 SDK 访问外部位置或云服务的存储。
语法
credential_identifier
参数
- credential_identifier:唯一标识凭据的非限定标识符。
示例
`my_storage_cred`
my_storage_cred
位置名称
标识外部存储位置。
语法
location_identifier
参数
- location_identifier:唯一标识位置的非限定标识符。
示例
`s3-json-data`
s3_json_data
共享名
标识用于访问提供程序共享的数据的共享。
语法
share_identifier
参数
- share_identifier:唯一标识共享的非限定标识符。
示例
`public info`
`public-info`
public_info
提供程序名称
标识增量共享提供程序。
语法
provider_identifier
参数
-
唯一标识提供商的非限定标识符。
示例
`Good Corp`
`Good-corp`
Good_Corp
收件人姓名
标识共享的收件人。
语法
recipient_identifier
参数
- recipient_identifier:唯一标识收件人的非限定标识符。
示例
`Good Corp`
`Good-corp`
Good_Corp
净室名称
为一组协作者标识一个净室。
语法
clean_room_identifier
参数
- clean_room_identifier:一个非限定的标识符,唯一地指定协作者的元存储中的净室。
示例
`Clean-Room`
Clean_Room
卷名
标识 Unity Catalog 卷。 该卷可以使用架构名称进行限定,或使用简单标识符来进行取消限定。
语法
[ schema_name .] volume_identifier
parameters
- schema_name:一个包含该卷的限定或非限定架构名称。
- volume_identifier:架构内唯一标识该卷的非限定标识符。
示例
`myVolume`
`my-volume`
myschema.myVolume
my_unity_catalog.my_schema.my_volume