Classe de erro UNRESOLVED_ROUTINE
Não é possível resolver a função <routineName>
no caminho de pesquisa <searchPath>
.
Parâmetros
- routineName : O nome da função que não pode ser resolvida.
- SearchPath : A lista ordenada de esquemas que foi pesquisada se
routineName
não fosse qualificado para o esquema.
Explicação
As funções persistentes consistem em três partes de nome: <catalog>.<schema>.<relation>
.
Se você não especificar todas as três partes do nome, ele será preenchido implicitamente usando o catálogo atual ou o esquema atual.
Isso é semelhante à forma como o diretório de trabalho do seu sistema de arquivos influencia quais arquivos você pode ver, a menos que você especifique totalmente o caminho.
As funções temporárias só existem na sessão ou consulta e nunca devem ser qualificadas.
Os motivos mais comuns para não encontrar uma função são:
- A função não existe.
- O nome da função está escrito incorretamente.
- A função definida pelo usuário está localizada em um esquema diferente.
- A função definida pelo usuário não está localizada no esquema atual.
- Não é possível acessar view a função definida pelo usuário porque o senhor não tem acesso.
- A função integrada que o senhor está tentando invocar não está disponível nesta versão do Databricks.
Mitigação
Reduza os erros analisando o seguinte.
-
Você digitou o nome da função incorretamente?
Use
SHOW FUNCTIONS IN \<schema\>
para verificar o nome correto da função. -
A função está em um esquema diferente?
Se a função estiver localizada em um catálogo em Unity Catalog, execute a seguinte consulta:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Isso lista o esquema no catálogo atual em que a função está localizada.
Se a função estiver localizada fora do Unity Catalog, use
SHOW SCHEMAS
para encontrar esquemas candidatos. UseSHOW FUNCTIONS IN \<schema\>
para investigar a função. -
Você não qualificou totalmente o nome e o resultado de
VALUES current_schema()
não corresponde ao nome qualificado da função?Qualifique o site
functionName
com seu esquema e catálogo, ou executeUSE SCHEMA
para definir o esquema implícito. -
Você fez referência a uma função temporária, mas ela estava em uma sessão anterior, expirada ou diferente?
Recrie a função temporária usando
CREATE TEMPORARY FUNCTION \<routineName\> …
ou mude para uma função persistente. -
Você quer emitir uma instrução DDL, como
DROP FUNCTION
, caso o objeto exista?Emita a declaração usando a cláusula
IF EXISTS
, como:DROP FUNCTION \<routineName\> IF EXISTS
. -
Você sabe que a função existe, mas não consegue vê-la em
SHOW FUNCTIONS
?Entre em contato com seu administrador para ter acesso à função. Você também pode precisar acessar o esquema e o catálogo.
Para obter mais informações sobre como resolver o erro, consulte Resolução de funções.
Exemplos
> 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