classe di errore UNRESOLVED_ROUTINE
Impossibile risolvere la funzione <routineName>
nel percorso <searchPath>
di ricerca .
Parametri
- routineName: nome della funzione che non può essere risolta.
-
searchPath: elenco ordinato di schemi cercati se
routineName
non era qualificato dallo schema.
Spiegazione
Le funzioni persistenti sono costituite da tre parti del nome: <catalog>.<schema>.<relation>
.
Se non si specificano tutte e tre le parti del nome, vengono completate in modo implicito usando il catalogo corrente o lo schema corrente.
Questo è simile al modo in cui la directory di lavoro del file system influisce sui file visualizzati, a meno che non si specifichi completamente il percorso.
Le funzioni temporanee esistono solo all'interno della sessione o della query e non devono mai essere qualificate.
Il motivo più comune per cui non si trova una funzione sono:
- La funzione non esiste.
- Il nome della funzione è stato digitato in modo non digitato correttamente.
- La funzione definita dall'utente si trova in uno schema diverso.
- La funzione definita dall'utente non si trova nello schema corrente.
- Non è possibile visualizzare la funzione definita dall'utente perché non si ha accesso.
- La funzione predefinita che si sta tentando di richiamare non è disponibile in questa versione di Azure Databricks.
Strategia di riduzione del rischio
Attenuare gli errori esaminando quanto segue.
Il nome della funzione è stato digitato in modo errato?
Usare
SHOW FUNCTIONS IN <schema>
per verificare il nome corretto della funzione.La funzione è in uno schema diverso?
Se la funzione si trova in un catalogo in Unity Catalog, eseguire la query seguente:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
In questo modo viene elencato lo schema all'interno del catalogo corrente in cui si trova la funzione.
Se la funzione si trova all'esterno di Unity Catalog, usare
SHOW SCHEMAS
per trovare gli schemi candidati. UsareSHOW FUNCTIONS IN <schema>
per eseguire il probe per la funzione.Non hai qualificato completamente il nome, e il risultato di
VALUES current_schema()
non corrisponde al nome qualificato della funzione?Qualificare
functionName
con lo schema e il catalogo oppure eseguireUSE SCHEMA
per impostare lo schema implicito.Si è fatto riferimento a una funzione temporanea, ma si trovava in una sessione precedente, scaduta o diversa?
Ricreare la funzione temporanea usando
CREATE TEMPORARY FUNCTION <routineName> …
o passare all'uso di una funzione persistente.Eseguire un'istruzione DDL, ad esempio
DROP FUNCTION
nel caso in cui l'oggetto esista?Eseguire l'istruzione usando la
IF EXISTS
clausola , ad esempio :DROP FUNCTION <routineName> IF EXISTS
.Si sa che la funzione esiste, ma non è possibile vederla in
SHOW FUNCTIONS
?Contattare l'amministratore per ottenere l'accesso alla funzione. Potrebbe anche essere necessario accedere allo schema e al catalogo.
Per altre informazioni su come risolvere l'errore, vedere Risoluzione delle funzioni.
Esempi
> 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