UNRESOLVED_ROUTINE classe de erro
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 qualificada 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á completado implicitamente usando o catálogo atual ou o esquema atual.
Isso é semelhante à maneira como o diretório de trabalho do sistema de arquivos influencia quais arquivos você pode ver, a menos que você especifique completamente 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á incorreto.
- 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.
- Você não pode exibir a função definida pelo usuário porque não tem acesso.
- A função interna que você está tentando invocar não está disponível nesta versão do Azure Databricks.
Mitigação
Reduza os erros revisando 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 no Catálogo do Unity, execute a seguinte consulta:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Isso lista o esquema dentro do catálogo atual em que a função está localizada.
Se a função estiver localizada fora do Catálogo do Unity, use
SHOW SCHEMAS
para localizar esquemas candidatos. UseSHOW FUNCTIONS IN <schema>
para sondar 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-se
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 alterne para o uso de uma função persistente.Deseja emitir uma instrução DDL, como
DROP FUNCTION
apenas no caso de o objeto existir?Emita a instruçã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 o administrador para obter acesso à função. Você também pode precisar de acesso ao esquema e ao catálogo.
Para obter mais informações sobre como resolver o erro, consulte Resolução de função.
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