UNRESOLVED_ROUTINE错误类

SQLSTATE: 42883

无法解析函数< routineName >在搜索路径上< searchPath >

参数

  • routineName:无法解析的函数名。

  • searchPath:搜索模式的有序列表routineName模式不合格。

解释

持久化函数由三个名称部分组成:<目录>。< schema >。< >的关系.如果没有指定名称的所有三个部分,则使用当前目录或当前模式隐式完成。这类似于文件系统的工作目录影响您可以看到哪些文件的方式,除非您完全指定路径。

临时函数只存在于会话或查询中,并且永远不能限定。

找不到函数的最常见原因是:

  • 函数不存在。

  • 函数名拼写错误。

  • 用户定义的函数位于不同的模式中。

  • 用户定义的函数不在当前模式中。

  • 您无法查看用户定义的函数,因为您没有访问权限。

  • 您试图调用的内置函数在此发行版Databricks上不可用。

缓解

通过检查以下内容来减少错误。

  • 函数名拼写错误了吗?

    使用显示中的函数验证正确的函数名。

  • 函数是不同的模式吗?

    如果函数位于Unity catalog中的某个目录中,则执行以下查询:

    选择routine_schemainformation_schema.routines在哪里routine_name' < routinename >”

    这将列出函数所在的当前目录中的模式。

    如果函数位于Unity Catalog之外,请使用“显示模式”查找候选模式。使用显示中的函数来探测函数。

  • 你没有完全限定名字和结果吗的值current_schema()”与函数的限定名不匹配?

    有资格functionName与其模式和目录,或运行“使用模式”设置隐式模式。

  • 您是否引用了一个临时函数,但它在以前的、过期的或不同的会话中?

    使用重新创建临时函数创建临时函数,或切换到使用持久函数。

  • 您是否希望发出DDL语句,例如下降函数只是为了以防对象存在?

    命令发出语句如果存在子句,例如:' DROP FUNCTION IF EXISTS '

  • 你是否知道函数存在,但你看不到它的显示功能?

    请与管理员联系以获得该功能的访问权。您可能还需要访问模式和编目。

有关如何解决错误的详细信息,请参见函数解析

例子

>创建模式如果存在myschema>创建取代函数myschemamyfunc()返回INT返回5--——函数名拼写错误-->选择myschemamyfun();UNRESOLVED_ROUTINE不能解决函数myschemamyfun搜索路径系统内装式系统会话spark_catalog默认的]。1pos7—使用SHOW函数找到正确的nme>显示用户功能myschemaspark_catalogmyschemamyfunc——纠正拼写错误>选择myschemamyfunc();5--限定词拼错了-->创建模式如果存在wrongschema>选择wrongschemamyfuncUNRESOLVED_ROUTINE不能解决函数wrongschemamyfunc搜索路径系统内装式系统会话spark_catalog默认的]。1pos7——寻找候选模式>显示模式myschemawrongschema——验证该函数存在于候选模式中>显示用户功能myschemaspark_catalogmyschemamyfunc>选择myschemamyfunc();5--—更改当前模式以查找不合格的函数-->选择myfunc();UNRESOLVED_ROUTINE不能解决函数myfunc搜索路径系统内装式系统会话spark_catalog默认的]。1pos7>使用模式myschema选择myfunc();5