SET 路徑

適用於:勾選標記為是 Databricks SQL 勾選為 Databricks 執行時間 19 及以上

路徑是 Azure Databricks 搜尋的有序結構清單,當查詢或 DML 語句引用沒有目錄與 schema 限定符的表格、檢視或函式時。 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.builtin 並 system.ai 儲存內建的標量、表格和 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]