UNRESOLVED_ROUTINE Fehlerklasse
Die Funktion <routineName>
für den Suchpfad <searchPath>
kann nicht aufgelöst werden.
Parameter
- routineName: Der Name der Funktion, die nicht aufgelöst werden kann.
- searchPath: Die sortierte Liste der Schemas, die durchsucht wurden, wenn
routineName
das Schema nicht qualifiziert war.
Erklärung
Beibehaltene Funktionen bestehen aus drei Namensteilen: <catalog>.<schema>.<relation>
.
Wenn Sie nicht alle drei Teile des Namens angeben, wird er implizit mithilfe des aktuellen Katalogs oder des aktuellen Schemas ergänzt.
Dies ähnelt der Art und Weise, wie das Arbeitsverzeichnis Ihres Dateisystems beeinflusst, welche Dateien angezeigt werden, wenn Sie den Pfad nicht vollständig angeben.
Temporäre Funktionen sind nur innerhalb der Sitzung oder Abfrage vorhanden und dürfen niemals qualifiziert werden.
Der häufigste Grund für das Nichtfinden einer Funktion sind:
- Die Funktion ist nicht vorhanden.
- Der Funktionsname ist falsch geschrieben.
- Die benutzerdefinierte Funktion befindet sich in einem anderen Schema.
- Die benutzerdefinierte Funktion befindet sich nicht im aktuellen Schema.
- Sie können die benutzerdefinierte Funktion nicht anzeigen, da Sie keinen Zugriff haben.
- Die integrierte Funktion, die Sie aufrufen möchten, ist in dieser Version von Azure Databricks nicht verfügbar.
Abmilderung
Beheben Sie Fehler, indem Sie Folgendes überprüfen.
Haben Sie den Funktionsnamen falsch geschrieben?
Wird verwendet
SHOW FUNCTIONS IN <schema>
, um den richtigen Funktionsnamen zu überprüfen.Befindet sich die Funktion in einem anderen Schema?
Wenn sich die Funktion in einem Katalog im Unity-Katalog befindet, führen Sie die folgende Abfrage aus:
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Dadurch wird das Schema im aktuellen Katalog aufgelistet, in dem sich die Funktion befindet.
Wenn sich die Funktion außerhalb des Unity-Katalogs befindet, verwenden Sie diese Option
SHOW SCHEMAS
, um Kandidatenschemas zu finden. WirdSHOW FUNCTIONS IN <schema>
verwendet, um die Funktion zu untersuchen.Haben Sie den Namen nicht vollständig qualifiziert, und das Ergebnis
VALUES current_schema()
stimmt nicht mit dem qualifizierten Namen der Funktion überein?Qualifizieren Sie
functionName
sich mit ihrem Schema und Katalog, oder führen Sie die AusführungUSE SCHEMA
aus, um das implizite Schema festzulegen.Haben Sie auf eine temporäre Funktion verwiesen, aber in einer vorherigen, abgelaufenen oder anderen Sitzung?
Erstellen Sie die temporäre Funktion unter Verwendung einer dauerhaften Funktion neu
CREATE TEMPORARY FUNCTION <routineName> …
, oder wechseln Sie zu einer dauerhaften Funktion.Möchten Sie eine DDL-Anweisung ausgeben, z
DROP FUNCTION
. B. nur für den Fall, dass das Objekt vorhanden ist?Geben Sie die Anweisung mithilfe der
IF EXISTS
-Klausel aus, z. B.DROP FUNCTION <routineName> IF EXISTS
.Wissen Sie, dass die Funktion vorhanden ist, aber Sie können sie nicht sehen
SHOW FUNCTIONS
?Wenden Sie sich an Ihren Administrator, um Zugriff auf die Funktion zu erhalten. Möglicherweise benötigen Sie auch Zugriff auf das Schema und den Katalog.
Weitere Informationen zum Beheben des Fehlers finden Sie unter Funktionsauflösung.
Beispiele
> 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