名称

适用于:勾选“是” 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

示例

> CREATE CONNECTION my_postgresql ...;

目录名称

标识目录。 目录提供对象的分组,这些对象可以进一步细分为架构。

语法

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 }

参数

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 `数据库架构`;

数据库名称

架构名称的同义词。

虽然使用 SCHEMADATABASE 是可互换的,但最好使用 SCHEMA

表名称

标识一个表对象。 该表可以使用架构名称进行限定,或使用简单标识符来进行取消限定。

语法

{ [ schema_name . ] table_identifier [ temporal_spec ] |
  IDENTIFIER clause [ temporal_spec ] |
  { file_format | `file_format` } . `path_to_table` [ temporal_spec ] [ credential_spec ] }

temporal_spec
{
  @ timestamp_encoding |
  @V version |
  [ FOR ] { SYSTEM_TIMESTAMP | TIMESTAMP } AS OF timestamp_expression |
  [ FOR ] { SYSTEM_VERSION | VERSION } AS OF version
}

credential_spec
  WITH ( CREDENTIAL credential_name )

参数

  • schema_name:包含表的限定或非限定架构名称。

  • table_identifier:指定表或 table_alias 的名称的标识符。

  • file_formatjsoncsvavroparquetorcbinaryFiletextdelta 之一(不区分大小写)。

  • 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 表版本的整数文本或字符串文本。
  • credential_spec

    可以使用适用的凭据来获取对未嵌入path_to_table外部位置 的访问权限。

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)

-- 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 }

参数

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 }

参数

标识的列必须位于表或视图中。

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

可以通过沿根 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.sessionsession)进行限定,或使用简单标识符进行取消限定

语法

{ [ schema_name . ] variable_identifier |
  IDENTIFIER clause }

parameters

示例


-- 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 }

参数

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

参数

示例

-- 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 [, ...] ) ]

参数

如果提供列标识符,则它们的编号必须与匹配关系中的列数匹配。

如果不提供列标识符,它们的名称将从标记关系继承。

示例

-- 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 [, ...] )

参数

尽管列别名在选择列表中不需要是唯一,但需要唯一性来通过名称引用别名。

示例

-- 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

凭据名称

标识用于访问外部位置存储的凭据。

语法

credential_identifier

参数

示例

位置名称

标识外部存储位置。

语法

location_identifier

参数

示例

`s3-json-data`

s3_json_data

共享名

标识用于访问提供程序共享的数据的共享。

语法

share_identifier

参数

示例

`public info`

`public-info`

public_info

提供程序名称

标识增量共享提供程序。

语法

provider_identifier

参数

示例

`Good Corp`

`Good-corp`

Good_Corp

收件人姓名

标识共享的收件人。

语法

recipient_identifier

参数

示例

`Good Corp`

`Good-corp`

Good_Corp

卷名

标识 Unity Catalog 卷。 该卷可以使用架构名称进行限定,或使用简单标识符来进行取消限定。

语法

[ schema_name .] volume_identifier

parameters

  • schema_name:一个包含该卷的限定或非限定架构名称。
  • volume_identifier:架构内唯一标识该卷的非限定标识符。

示例

`myVolume`

`my-volume`

myschema.myVolume

my_unity_catalog.my_schema.my_volume