UNRESOLVED_ROUTINE錯誤類別
無法解析搜尋路徑 <searchPath>
上的函式<routineName>
。
參數
- routineName:無法解析之函式的名稱。
- searchPath:如果
routineName
不是架構限定,則搜尋的已排序架構清單。
說明
保存的函式包含三個名稱部分: <catalog>.<schema>.<relation>
。
如果您未指定名稱的所有三個部分,則會使用目前的目錄或目前的架構隱含完成。
這與文件系統的工作目錄如何影響您可以看到哪些檔案的方式類似,除非您完全指定路徑。
暫存函式只存在於會話或查詢內,且絕對不能限定。
找不到函式最常見的原因是:
- 函式不存在。
- 函式名稱拼錯。
- 用戶定義函數位於不同的架構中。
- 用戶定義函數不在目前的架構中。
- 您無法檢視使用者定義函式,因為您沒有存取權。
- 您嘗試叫用的內建函式在此版本的 Azure Databricks 上無法使用。
風險降低
檢閱下列內容來減輕錯誤。
您拼錯了函式名稱嗎?
使用
SHOW FUNCTIONS IN <schema>
來驗證正確的函式名稱。函式是否位於不同的架構中?
如果函式位於 Unity 目錄中的目錄,請執行下列查詢:
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