UNRESOLVED_ROUTINE 错误类
无法解析搜索路径 <searchPath>
上的函数 <routineName>
。
参数
- 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 Catalog 外部,请使用
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