次の方法で共有


エラー クラスUNRESOLVED_ROUTINE

SQLSTATE: 42883

検索パス <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