SET 路径

适用于:勾选标记为是 Databricks SQL 勾选为 Databricks 运行时 19 及以上

路径是 Azure Databricks 在查询或 DML 语句引用没有目录和模式限定符的表、视图或函数时搜索的有序模式列表。 DDL语句的无限定主语是 current_catalog.current_schema,不是路径查找,因此 CREATE TABLE t 在当前模式中创建 t 。 关于该路径如何应用于DDL语句中的查询和持久视图,请参见 表和视图解析。 关于例行实体,请参见 功能与过程解析。

Syntax

SET PATH = path_element [, ...]

path_element
  { DEFAULT_PATH |
    SYSTEM_PATH |
    CURRENT_SCHEMA |
    PATH |
    schema_name }

Parameters

  • DEFAULT_PATH

    一个关键词,可以扩展到 PATH 配置参数,这是新会话继承的工作区默认参数。 如果参数未被覆盖,则展开为 system.session, system.builtin, system.ai, CURRENT_SCHEMA。

  • SYSTEM_PATH

    一个扩展到系统提供的模式的关键词: system.builtin, system.ai。

  • CURRENT_SCHEMA

    一个虚拟模式引用,在使用时会解析到当前目录和当前模式(current_catalog().current_schema())。 该扩展包是在游戏期间及期间所做的USE CATALOGUSE SCHEMA调整之后进行的。

  • PATH

    一个关键词,可以扩展到当前会话路径。 用它来延长路径,而不重述内容。

  • schema_name

    需要一个两部分的名称(catalog.schema)。 允许使用超过两个部分的名字。 一个单部分的名字就提升 了INVALID_SQL_PATH_SCHEMA_REFERENCE。

    目录和模式在运行 SET PATH时不必存在。 名称解析跳过缺失的条目,继续使用下一个路径元素。

Description

以下规则决定了哪些路径元素 SET PATH 接受,以及最终路径如何影响名称解析。

  • 重复路径:不允许重复路径元素。 关键词扩展后,重复的数字会提升 DUPLICATE_SQL_PATH_ENTRY。
  • 系统模式: system.builtinsystem.ai 以及内置标量、表格和人工智能功能。 system.session 存储会话范围的对象,如临时变量、临时函数和临时视图。 通常不建议离开 system.builtin 小径。
  • 省略的模式:不限定名称仅针对路径上的模式结算。 如果省略 CURRENT_SCHEMA,则在当前模式中限定持久对象。 如果你省略 system.builtin 或 system.ai,则对这些函数进行了限定,例如 system.builtin.abs。 如果省略 system.session,则找不到未限定的临时视图、临时函数和会话变量。
  • 视图和例程:持久视图、SQL用户自定义函数和 SQL SECURITY DEFINER 过程捕获路径, CREATE 并在其正体中针对捕获路径解析未限定名称,而非调用者的会话路径。 捕获 SQL SECURITY DEFINER 路径中会省略 system.session 一个过程。 过程 SQL SECURITY INVOKER 使用呼叫者的实时路径。 参见 “捕获路径”。
  • 检查路径: SET PATH; 不会打印路径。 用 上current_path。

Examples

按顺序运行以下语句,因为后续语句会在之前语句设定的路径上构建。

-- Restore the workspace default.
> SET PATH = DEFAULT_PATH;
> SELECT current_path();
  system.session,system.builtin,system.ai,main.default

-- Restrict the PATH to only the system-provided schemas.
> SET PATH = SYSTEM_PATH;
> SELECT current_path();
  system.builtin,system.ai

-- Append a schema to the existing PATH without restating it.
> SET PATH = PATH, libraries.pgsql;
> SELECT current_path();
  system.builtin,system.ai,libraries.pgsql

-- Put the current schema ahead of the system schemas so that user-defined
-- functions shadow built-in functions of the same name.
> SET PATH = CURRENT_SCHEMA, PATH;
> SELECT current_path();
  main.default,system.builtin,system.ai,libraries.pgsql

以下语句失败且不会改变路径。

-- A single-part schema name is rejected.
> SET PATH = my_schema;
  [INVALID_SQL_PATH_SCHEMA_REFERENCE]

-- A duplicate path element raises an error after expansion.
> SET PATH = SYSTEM_PATH, system.builtin;
  [DUPLICATE_SQL_PATH_ENTRY]