名称

适用于:check marked yes Databricks SQL check marked yes 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;

架构名称

标识架构。 架构在目录中提供对象的分组。

语法

{ [ catalog_name . ] schema_identifier |
  IDENTIFIER clause }

参数

示例

> USE SCHEMA default;

> CREATE SCHEMA my_sc;

数据库名称

架构名称的同义词。

虽然使用 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外部位置 的访问权限。

如果名称未限定并且未引用已知的表别名,则 Azure Databricks 首先尝试解析当前架构中的表。

如果名称由架构限定,Azure Databricks 将尝试解析当前目录中的表。

有关名称解析的详细信息,请参阅 表和视图解析

如果对不属于 Delta Lake 格式的表使用 temporal_spec,Azure Databricks 将引发错误。

示例

`Employees`

employees

hr.employees

`hr`.`employees`

hive_metastore.default.tab

system.information_schema.columns

delta.`somedir/delta_table`

`csv`.`spreadsheets/data.csv`

`csv`.`spreadsheets/data.csv` WITH (CREDENTIAL some_credential)

视图名称

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

语法

{ [ schema_name . ] view_identifier |
  IDENTIFIER clause }

参数

示例

`items`

items

hr.items

`hr`.`items`

列名

标识表或视图中的列。 该列可以使用表或视图名称进行限定,或使用简单标识符来进行非限定 。

语法

{ [ { table_name | view_name } . ] column_identifier |
  IDENTIFIER clause }

参数

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

Azure Databricks 支持特殊的 _metadata 列。 此 struct 类型的伪列是每个表的一部分,可以用于检索关于表中行的元数据信息。

警告

如果表架构包含名为 _metadata 的列,则查询将从数据源返回该列,而不是文件元数据。 _metadata 伪列将不可访问。

示例

-- 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 _matadata to retrieve infromation about rows retrieved from T.
> CREATE TABLE T(c1 INT);
> INSERT INTO T VALUES(1);
> SELECT T._metadata.file_size;
  574

字段名称

标识 struct 内的字段。 该字段必须限定为包含该字段的结构的路径。

语法

{ expr { . field_identifier [. ...] } |
  IDENTIFIER clause }

parameters

可以通过沿根 struct 的路径指定字段标识符来引用深度嵌套的字段。

示例

> SELECT addr.address.name
    FROM VALUES (named_struct('address', named_struct('number', 5, 'name', 'Main St'),
                              'city', 'Springfield')) as t(addr);
  Main St

变量名称

标识临时(会话)变量。 该变量可以使用架构名称(system.sessionsession)进行限定,或使用简单标识符进行取消限定

语法

{ [ schema_name . ] variable_identifier |
  IDENTIFIER clause }

parameters

示例

`session`.myvar

myvar

system.session.`myvar`

函数名称

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

语法

{ [ schema_name . ] function_identifier |
  IDENTIFIER clause }

参数

示例

`math`.myplus

myplus

math.`myplus`

参数名称

标识 SQL 用户定义的函数 (SQL UDF) 主体中的参数。 该函数可以使用函数标识符进行限定,或使用简单标识符来进行取消限定。

语法

[ function_identifier . ] parameter_identifier

参数

示例

CREATE FUNCTION area(x INT, y INT) RETURNS INT
RETURN area.x + y;

表别名

为表引用、查询、表函数或其他形式的关系标记。

语法

[ AS ] table_identifier [ ( column_identifier1 [, ...] ) ]

参数

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

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

示例

> SELECT a, b FROM VALUES (1, 2) AS t(a, b);
 a  b
 1  2

> DELETE FROM emp AS e WHERE e.c1 = 5;

列别名

SELECT 列表中标记表达式的结果以供参考。

如果表达式是表值生成器函数,则别名标记生成列的列表。

语法

[AS] column_identifier
[AS] ( column_identifier [, ...] )

参数

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

示例

> SELECT 1 AS a;
 a
 1

> SELECT 1 a, 2 b;
 a b
 1 2

> SELECT 1 AS `a`;
 a
 1

> SELECT posexplode(array(2)) AS (i, a);
 i  a
 0  2

> 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