UNRESOLVED_ROUTINE, klasa błędów
Nie można rozpoznać funkcji <routineName>
w ścieżce <searchPath>
wyszukiwania .
Parametry
- routineName: nazwa funkcji, której nie można rozpoznać.
- searchPath: uporządkowana lista schematów, które zostały przeszukane, jeśli
routineName
nie został zakwalifikowany schemat.
Wyjaśnienie
Utrwalone funkcje składają się z trzech części nazw: <catalog>.<schema>.<relation>
.
Jeśli nie określisz wszystkich trzech części nazwy, zostanie ona niejawnie ukończona przy użyciu bieżącego wykazu lub bieżącego schematu.
Jest to podobne do sposobu, w jaki katalog roboczy systemu plików wpływa na widoczne pliki, chyba że w pełni określisz ścieżkę.
Funkcje tymczasowe istnieją tylko w ramach sesji lub zapytania i nigdy nie muszą być kwalifikowane.
Najczęstszą przyczyną braku znalezienia funkcji jest:
- Funkcja nie istnieje.
- Nazwa funkcji jest błędnie wpisać.
- Funkcja zdefiniowana przez użytkownika znajduje się w innym schemacie.
- Funkcja zdefiniowana przez użytkownika nie znajduje się w bieżącym schemacie.
- Nie można wyświetlić funkcji zdefiniowanej przez użytkownika, ponieważ nie masz dostępu.
- Wbudowana funkcja, którą próbujesz wywołać, nie jest dostępna w tej wersji usługi Azure Databricks.
Czynności zapobiegawcze
Zniweluj błędy, przeglądając następujące elementy.
Czy nazwa funkcji została wpisana niepoprawnie?
Użyj polecenia
SHOW FUNCTIONS IN <schema>
, aby zweryfikować poprawną nazwę funkcji.Czy funkcja jest w innym schemacie?
Jeśli funkcja znajduje się w wykazie aparatu Unity, uruchom następujące zapytanie:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Spowoduje to wyświetlenie schematu w bieżącym wykazie, w którym znajduje się funkcja.
Jeśli funkcja znajduje się poza wykazem aparatu Unity, użyj polecenia
SHOW SCHEMAS
, aby znaleźć schematy kandydatów. UżyjSHOW FUNCTIONS IN <schema>
polecenia , aby sondować funkcję.Czy nazwa nie została w pełni kwalifikowana, a wynik
VALUES current_schema()
polecenia nie jest zgodny z kwalifikowaną nazwą funkcji?Zakwalifikuj
functionName
schemat i katalog lub uruchom polecenieUSE SCHEMA
, aby ustawić niejawny schemat.Czy odwołujesz się do funkcji tymczasowej, ale była ona w poprzedniej, wygasłej lub innej sesji?
Utwórz ponownie funkcję tymczasową przy użyciu metody
CREATE TEMPORARY FUNCTION <routineName> …
lub przełącz się na używanie utrwalonej funkcji.Czy chcesz wydać instrukcję DDL, taką jak
DROP FUNCTION
w przypadku, gdy obiekt istnieje?Wydaj instrukcję przy użyciu klauzuli
IF EXISTS
, na przykład:DROP FUNCTION <routineName> IF EXISTS
.Czy wiesz, że funkcja istnieje, ale nie widzisz jej w
SHOW FUNCTIONS
pliku ?Skontaktuj się z administratorem, aby uzyskać dostęp do funkcji. Może być również potrzebny dostęp do schematu i katalogu.
Aby uzyskać więcej informacji na temat sposobu rozwiązywania błędu, zobacz Rozpoznawanie funkcji.
Przykłady
> 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