エラー クラスUNRESOLVED_ROUTINE
検索パス <searchPath>
の関数 <routineName>
を解決できません。
パラメーター
- routineName: 解決できない関数の名前。
- searchPath:
routineName
がスキーマ修飾されていない場合に検索されたスキーマの順序付きリスト。
説明
永続化された関数は、 <catalog>.<schema>.<relation>
という 3 つの名前部分で構成されます。
名前の 3 つの部分の一部を指定しない場合でも、現在のカタログまたは現在のスキーマを使用して暗黙的に名前が完成します。
これは、パスを完全に指定する場合を除いて、ファイル システムの作業ディレクトリによって、どのファイルを表示できるかに与える影響に似ています。
一時関数はセッションまたはクエリ内にのみ存在し、修飾しないでください。
関数が見つからない最も一般的な理由は次のとおりです。
- 関数が存在しません。
- 関数名のスペルが間違います。
- ユーザー定義関数は、別のスキーマにあります。
- ユーザー定義関数が現在のスキーマに存在しません。
- アクセス権がないため、ユーザー定義関数を表示できません。
- 呼び出そうとしている組み込み関数は、このリリースの Azure Databricks では使用できません。
対応策
次の内容を確認して、エラーを軽減します。
関数名のスペルが正しくありませんか?
SHOW FUNCTIONS IN <schema>
を使用して、正しい関数名を確認します。関数は別のスキーマに含まれていますか?
関数が Unity カタログのカタログにある場合は、次のクエリを実行します。
SELECT routine_schema FROM information_schema.routines WHERE routine_name = '<routinename>'
これにより、関数が配置されている現在のカタログ内のスキーマが一覧表示されます。
関数が Unity カタログの外部にある場合は、
SHOW SCHEMAS
を使用して候補のスキーマを検索します。SHOW FUNCTIONS IN <schema>
を使用して関数をプローブします。名前を完全に修飾しておらず、
VALUES current_schema()
の結果が関数の修飾名と一致していませんか?スキーマとカタログで
functionName
を修飾するか、USE SCHEMA
実行して暗黙的なスキーマを設定します。一時関数を参照しましたが、以前のセッション、期限切れ、または別のセッションにありましたか?
CREATE TEMPORARY FUNCTION <routineName> …
を使用して一時関数を再作成するか、永続化された関数の使用に切り替えます。オブジェクトが存在する場合に備えて、
DROP FUNCTION
などの DDL ステートメントを発行しますか?IF EXISTS
句を使用して ステートメントを発行します (例:DROP FUNCTION <routineName> IF EXISTS
)。関数が存在することはわかっていますが、
SHOW FUNCTIONS
で見ることはできませんか?関数にアクセスするには、管理者に問い合わせてください。 スキーマとカタログへのアクセスが必要な場合もあります。
エラーを解決する方法の詳細については、「 Function の解決」を参照してください。
例
> 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