classe d’erreur UNRESOLVED_ROUTINE
Impossible de résoudre la fonction <routineName>
sur le chemin de recherche <searchPath>
.
Paramètres
- routineName : nom de la fonction qui ne peut pas être résolue.
- searchPath : liste ordonnée de schémas qui a été recherché s’il
routineName
n’était pas qualifié de schéma.
Explication
Les fonctions persistantes se composent de trois parties de nom : <catalog>.<schema>.<relation>
.
Si vous ne spécifiez pas les trois parties du nom, celui-ci est implicitement complété à l’aide du catalogue ou du schéma actuel.
Cela est similaire à la façon dont le répertoire de travail de votre système de fichiers influence les fichiers que vous pouvez voir, sauf si vous spécifiez entièrement le chemin d’accès.
Les fonctions temporaires existent uniquement dans la session ou la requête et ne doivent jamais être qualifiées.
La raison la plus courante de ne pas trouver de fonction est la suivante :
- La fonction n’existe pas.
- Le nom de la fonction est mal orthographié.
- La fonction définie par l’utilisateur se trouve dans un autre schéma.
- La fonction définie par l’utilisateur n’est pas située dans le schéma actuel.
- Vous ne pouvez pas afficher la fonction définie par l’utilisateur, car vous n’avez pas accès.
- La fonction intégrée que vous essayez d’appeler n’est pas disponible sur cette version d’Azure Databricks.
Limitation des risques
Réduisez les erreurs en examinant les éléments suivants.
Avez-vous orthographié le nom de la fonction de manière incorrecte ?
Permet
SHOW FUNCTIONS IN <schema>
de vérifier le nom de la fonction correcte.La fonction est-elle dans un schéma différent ?
Si la fonction se trouve sur un catalogue dans Le catalogue Unity, exécutez la requête suivante :
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
Cela répertorie le schéma dans le catalogue actuel où se trouve la fonction.
Si la fonction se trouve en dehors du catalogue Unity, utilisez
SHOW SCHEMAS
cette option pour rechercher des schémas candidats. PermetSHOW FUNCTIONS IN <schema>
de rechercher la fonction.Vous n’avez pas entièrement qualifié le nom et le résultat de
VALUES current_schema()
ne correspond pas au nom qualifié de la fonction ?Qualifiez-vous
functionName
avec son schéma et son catalogue, ou exécutez-leUSE SCHEMA
pour définir le schéma implicite.Avez-vous fait référence à une fonction temporaire, mais elle était dans une session précédente, expirée ou différente ?
Recréez la fonction temporaire à l’aide
CREATE TEMPORARY FUNCTION <routineName> …
d’une fonction persistante ou basculez vers une fonction persistante.Voulez-vous émettre une instruction DDL, telle que
DROP FUNCTION
juste en cas d’existence de l’objet ?Émettez l’instruction à l’aide de la clause
IF EXISTS
, par exemple :DROP FUNCTION <routineName> IF EXISTS
.Savez-vous que la fonction existe, mais vous ne pouvez pas la voir dans
SHOW FUNCTIONS
?Contactez votre administrateur pour accéder à la fonction. Vous devrez peut-être également accéder au schéma et au catalogue.
Pour plus d’informations sur la résolution de l’erreur, consultez résolution de fonction.
Exemples
> 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