UNRESOLVED_ROUTINE 错误类

SQLSTATE:42883

无法解析搜索路径 <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