适用于:
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;
标识架构。
架构在目录中提供对象的分组。
{ [ catalog_name . ] schema_identifier |
IDENTIFIER clause }
catalog_name:现有目录的名称。
schema_identifier:唯一标识架构的标识符。
IDENTIFIER 子句:将常量 STRING
映射为架构名称。
> USE SCHEMA default;
> CREATE SCHEMA my_sc;
数据库名称
架构名称的同义词。
虽然使用 SCHEMA
和 DATABASE
是可互换的,但最好使用 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_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 表版本的整数文本或字符串文本。
credential_spec
可以使用适用的凭据来获取对未嵌入path_to_table
外部位置的 的访问权限。
credential_name
用于访问存储位置的凭据的名称。
如果名称未限定并且未引用已知的表别名,则 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 }
schema_name:包含视图的架构的限定名称或非限定名称。
view_identifier :指定视图名称的标识符或 CTE 的视图标识符。
IDENTIFIER 子句:将常量 STRING
映射为视图名称。
`items`
items
hr.items
`hr`.`items`
标识表或视图中的列。
该列可以使用表或视图名称进行限定,或使用简单标识符来进行非限定 。
{ [ { table_name | view_name } . ] column_identifier |
IDENTIFIER clause }
table_name :包含列的表的限定或非限定表名。
view_name :包含列的视图的限定或非限定视图名称。
column_identifier :指定列名称的标识符。
IDENTIFIER 子句:将常量 STRING
映射为列名称。
标识的列必须位于表或视图中。
Azure Databricks 支持特殊的 _metadata 列。
此 struct 类型的伪列是每个表的一部分,可以用于检索关于表中行的元数据信息。
如果表架构包含名为 _metadata
的列,则查询将从数据源返回该列,而不是文件元数据。 _metadata
伪列将不可访问。
-- An unqualified column name
> SELECT c1 FROM VALUES(1) AS T(c1);
-- A qualified column name
> SELECT T.c1 FROM VALUES(1) AS T(c1);
-- 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;
标识 struct 内的字段。
该字段必须限定为包含该字段的结构的路径。
{ expr { . field_identifier [. ...] } |
IDENTIFIER clause }
parameters
expr:struct 类型的表达式。
field_identifier:指定字段名称的标识符。
IDENTIFIER 子句:将常量 STRING
映射为字段名称。
可以通过沿根 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.session
或 session
)进行限定,或使用简单标识符进行取消限定。
{ [ schema_name . ] variable_identifier |
IDENTIFIER clause }
parameters
schema_name:包含所有临时变量的 system.session
或 session
。
variable_identifier:一个指定变量名称的标识符。
`session`.myvar
myvar
system.session.`myvar`
标识一个函数。
该函数可以使用架构名称进行限定,或使用简单标识符来进行取消限定。
{ [ schema_name . ] function_identifier |
IDENTIFIER clause }
schema_name:包含函数的架构的限定名称或非限定名称。
function_identifier :指定函数名称的标识符。
IDENTIFIER 子句:将常量 STRING
映射为函数名称。
`math`.myplus
myplus
math.`myplus`
标识 SQL 用户定义的函数 (SQL UDF) 主体中的参数。
该函数可以使用函数标识符进行限定,或使用简单标识符来进行取消限定。
[ function_identifier . ] parameter_identifier
function_identifier:指定函数名称的标识符。
parameter_identifier:指定参数名称的标识符。
CREATE FUNCTION area(x INT, y INT) RETURNS INT
RETURN area.x + y;
为表引用、查询、表函数或其他形式的关系标记。
[ AS ] table_identifier [ ( column_identifier1 [, ...] ) ]
table_identifier :指定表名称的标识符。
column_identifierN :指定列名称的可选标识符。
如果提供列标识符,则它们的编号必须与匹配关系中的列数匹配。
如果不提供列标识符,它们的名称将从标记关系继承。
> SELECT a, b FROM VALUES (1, 2) AS t(a, b);
> DELETE FROM emp AS e WHERE e.c1 = 5;
在 SELECT
列表中标记表达式的结果以供参考。
如果表达式是表值生成器函数,则别名标记生成列的列表。
[AS] column_identifier
[AS] ( column_identifier [, ...] )
column_identifier :指定列名称的标识符。
尽管列别名在选择列表中不需要是唯一,但需要唯一性来通过名称引用别名。
> SELECT 1 AS a;
> SELECT 1 a, 2 b;
> SELECT 1 AS `a`;
> SELECT posexplode(array(2)) AS (i, a);
> SELECT a + a FROM (SELECT 1 AS a);
标识用于访问外部位置存储的凭据。
credential_identifier
credential_identifier:唯一标识凭据的非限定标识符。
标识外部存储位置。
location_identifier
location_identifier:唯一标识位置的非限定标识符。
`s3-json-data`
s3_json_data
标识用于访问提供程序共享的数据的共享。
share_identifier
share_identifier:唯一标识共享的非限定标识符。
`public info`
`public-info`
public_info
提供程序名称
标识增量共享提供程序。
provider_identifier
provider_identifier
唯一标识提供商的非限定标识符。
`Good Corp`
`Good-corp`
Good_Corp
收件人姓名
标识共享的收件人。
recipient_identifier
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
IDENTIFIER 子句
文件元数据列