UNRESOLVED_ROUTINE felklass
Det går inte att lösa funktionen <routineName>
på sökvägen <searchPath>
.
Parametrar
- routineName: Namnet på funktionen som inte kan matchas.
-
searchPath: Den ordnade listan över scheman som genomsöktes om
routineName
inte schemakvalificerades.
Förklaring
Beständiga funktioner består av tre namndelar: <catalog>.<schema>.<relation>
.
Om du inte anger alla tre delarna av namnet slutförs det implicit med den aktuella katalogen eller det aktuella schemat.
Detta liknar hur arbetskatalogen i filsystemet påverkar vilka filer du kan se, såvida du inte helt anger sökvägen.
Tillfälliga funktioner finns bara i sessionen eller frågan och får aldrig kvalificeras.
Den vanligaste orsaken till att du inte hittar en funktion är:
- Funktionen finns inte.
- Funktionsnamnet är felstavat.
- Den användardefinierade funktionen finns i ett annat schema.
- Den användardefinierade funktionen finns inte i det aktuella schemat.
- Du kan inte visa den användardefinierade funktionen eftersom du inte har åtkomst.
- Den inbyggda funktion som du försöker anropa är inte tillgänglig i den här versionen av Azure Databricks.
Riskreducering
Åtgärda fel genom att granska följande.
Stavade du funktionsnamnet felaktigt?
Använd
SHOW FUNCTIONS IN <schema>
för att verifiera rätt funktionsnamn.Finns funktionen i ett annat schema?
Om funktionen finns i en katalog i Unity Catalog kör du följande fråga:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Då visas schemat i den aktuella katalogen där funktionen finns.
Om funktionen finns utanför Unity Catalog använder du
SHOW SCHEMAS
för att hitta kandidatscheman. AnvändSHOW FUNCTIONS IN <schema>
för att avsöka för funktionen.Har du inte kvalificerat namnet fullständigt och resultatet av
VALUES current_schema()
matchar inte funktionens kvalificerade namn?Kvalificera med
functionName
dess schema och katalog, eller körUSE SCHEMA
för att ange det implicita schemat.Refererade du till en tillfällig funktion, men den var i en tidigare, förfallen eller annan session?
Återskapa den tillfälliga funktionen med hjälp av
CREATE TEMPORARY FUNCTION <routineName> …
eller växla till med hjälp av en bevarad funktion.Vill du utfärda en DDL-instruktion, till exempel
DROP FUNCTION
om objektet finns?Utfärda -instruktionen med hjälp av
IF EXISTS
-satsen, till exempel:DROP FUNCTION <routineName> IF EXISTS
.Vet du att funktionen finns, men du kan inte se den i
SHOW FUNCTIONS
?Kontakta administratören för att få åtkomst till funktionen. Du kan också behöva åtkomst till schemat och katalogen.
Mer information om hur du löser felet finns i Funktionsmatchning.
Exempel
> 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