未解決的例行程序錯誤類別
無法解析搜尋路徑 <routineName>
上的函式<searchPath>
。
參數
- routineName:無法解析之函式的名稱。
-
searchPath:如果
routineName
尚無架構限定,則會搜尋已排序的架構清單。
說明
持續性函式由三個名稱部分組成:<catalog>.<schema>.<relation>
。
如果您未指定名稱的所有三個部分,則會使用目前的目錄或目前的架構隱含完成。
這與文件系統的工作目錄如何影響您可以看到哪些檔案的方式類似,除非您完全指定路徑。
暫存函式只存在於會話或查詢內,且絕對不能限定。
找不到函式最常見的原因是:
- 函式不存在。
- 函式名稱拼錯。
- 用戶定義函數位於不同的架構中。
- 用戶定義函數不在目前的架構中。
- 您無法檢視使用者定義函式,因為您沒有存取權。
- 您嘗試叫用的內建函式在此版本的 Azure Databricks 上無法使用。
風險降低
檢閱下列內容來減輕錯誤。
您拼錯了函式名稱嗎?
使用
SHOW FUNCTIONS IN <schema>
來驗證正確的函式名稱。函式是否位於不同的架構中?
如果函式位於 Unity Catalog 內的目錄,請執行下列查詢:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
這會列出函式所在目前目錄中的架構。
如果函式位於 Unity 目錄外部,請使用
SHOW SCHEMAS
來尋找候選架構。 使用SHOW FUNCTIONS IN <schema>
來探查函式。您是否未完整限定名稱,且 的結果
VALUES current_schema()
不符合函式的限定名稱?將
functionName
與其架構和目錄相符,或執行USE SCHEMA
以設定預設架構。您是否參考了一個先前、已過期或不同會話中的暫存函式?
使用
CREATE TEMPORARY FUNCTION <routineName> …
重建暫存函式,或切換至使用持久函式。您是否要發出 DDL 語句,例如
DROP FUNCTION
以防物件存在?使用
IF EXISTS
子句發出 語句,例如:DROP FUNCTION <routineName> IF EXISTS
。您知道函數是存在的,但無法在
SHOW FUNCTIONS
中看到它嗎?請連絡您的系統管理員以取得函式的存取權。 您可能也需要存取架構和目錄。
如需如何解決錯誤的詳細資訊,請參閱 函式解析。
範例
> CREATE SCHEMA IF NOT EXISTS myschema;
> CREATE OR REPLACE FUNCTION myschema.myfunc() RETURNS INT RETURN 5;
--
-- The function name has been misspelled
--
> SELECT myschema.myfun();
[UNRESOLVED_ROUTINE] Cannot resolve function `myschema`.`myfun` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7
-- Use SHOW FUNCTIONS to find the correct nme
> SHOW USER FUNCTIONS IN myschema;
spark_catalog.myschema.myfunc
-- Correct the spelling
> SELECT myschema.myfunc();
5
--
-- The qualifier has been misspelled
--
> CREATE SCHEMA IF NOT EXISTS wrongschema;
> SELECT wrongschema.myfunc;
[UNRESOLVED_ROUTINE] Cannot resolve function `wrongschema`.`myfunc` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7
-- Find candidate schemas
> SHOW SCHEMAS;
myschema
wrongschema
-- Verify the function exists in the candidate schema
> SHOW USER FUNCTIONS IN myschema;
spark_catalog.myschema.myfunc
> SELECT myschema.myfunc();
5
--
-- Change current schema to find an unqualified function
--
> SELECT myfunc();
[UNRESOLVED_ROUTINE] Cannot resolve function `myfunc` on search path [`system`.`builtin`, `system`.`session`, `spark_catalog`.`default`].; line 1 pos 7
> USE SCHEMA myschema;
SELECT myfunc();
5