Databricks SQL 名称

标识 Databricks SQL 中的不同类型的对象。

数据库名称

标识数据库。 数据库在目录中提供对象的分组。

语法

database_identifier

参数

示例

> use default;

> create database my_db;

架构名称

数据库名称的同义词。

表名称

标识一个表对象。 该表可以使用数据库名称进行限定,或使用简单标识符来进行非限定 。

语法

{ [ database_name . ] table_identifier |
  { file_format | `file_format` } . `path_to_table` }
  [temporal_specification]

temporal_specification
{
  @ timestamp_encoding |
  @V version |
  TIMESTAMP AS OF expr |
  VERSION AS OF version
}

参数

  • database_name :包含表的限定或非限定数据库名称。

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

  • file_format:、、 csvavroparquet 、、、 orcbinaryFiletext 、 (不 delta 区分大小写) 之一。

  • path_to_table:表在文件系统中的位置。 必须具有 ANY_FILE 权限才能使用此语法。

  • temporal_specification:当使用时,在指定时间点或版本中引用 Delta 表。

    只能在查询MERGE USING 的上下文中使用时间规范。

    • @ timestamp_encoding:用格式对时间戳进行编码的正 BIGINT 文本
    • @V 版本:一个正整数文本,用于标识增量表的版本。
  • expr :计算结果为 TIMESTAMP 的简单表达式。 expr 必须是常量表达式,但可以包含 current_date()current_timestamp()

  • timestamp_expression 可以是下列项中的任意一项:

    • '2018-10-18T22:15:12.013Z',即可以强制转换为时间戳的字符串
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18',即日期字符串
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • 本身就是时间戳或可强制转换为时间戳的任何其他表达式
  • version 是可以从 DESCRIBE HISTORY table_spec 的输出中获取的 long 值。

timestamp_expressionversion 都不能是子查询。

如果名称不合格并且未引用已知的表别名,则 Databricks SQL 首先尝试将表解析为当前数据库中的表。

如果名称由数据库限定,Databricks SQL 将尝试解析当前目录中的表。

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

示例

`Employees`

employees

hr.employees

`hr`.`employees`

delta.`somedir/delta_table`

`csv`.`spreadsheets/data.csv`

视图名称

标识视图。 该视图可以使用数据库名称进行限定,或使用简单标识符来进行非限定 。

语法

[ database_name . ] view_identifier

参数

示例

`items`

items

hr.items

`hr`.`items`

列名

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

语法

[ { table_name | view_name } . ] column_identifier

参数

  • table_name :包含列的表的限定或非限定表名。
  • view_name :包含列的视图的限定或非限定视图名称。
  • column_identifier :指定列名称的标识符。

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

示例

> SELECT c1 FROM VALUES(1) AS T(c1);
 c1
 1

字段名称

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

语法

expr { . field_identifier [. ...] }

参数

通过在根结构的路径上指定字段标识符,可以引用深度嵌套的字段。

示例

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

函数名称

标识一个函数。 该函数可以使用数据库名称进行限定,或使用简单标识符来进行非限定 。

语法

[ database_name . ] function_identifier

参数

示例

`math`.myplus

myplus

math.`myplus`

表别名

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

语法

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

列别名

在列表中标记 表达式 的结果 以供引用。

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

语法

[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