UDF の作成

ユーザー定義関数(UDF)またはユーザー定義テーブル関数(UDTF)を作成するには、そのロジックに使用するハンドラーなど、関数のプロパティを指定する CREATE FUNCTION コマンドを使用します。

このトピックでは、 UDF を作成するステップを示します。例については、 CREATE FUNCTION リファレンス をご参照ください。

Using the CREATE FUNCTION Statement to Associate the Handler Method With the UDF Name

次のステップで UDF を作成します。

  1. UDF が呼び出されたときに実行するハンドラーコードを記述します。

    サポートされているハンドラー言語のいずれかを使用できます。詳細については、 サポートされている言語 をご参照ください。

  2. ハンドラーコードを CREATE FUNCTION SQL ステートメントとインラインで保持するか、ステージで参照するかを選択します。

    それぞれに利点があります。詳細については、 ハンドラーコードのインラインまたはステージ上での保持 をご参照ください。

  3. SQL で CREATE FUNCTION ステートメントを実行し、関数のプロパティを指定します。

    次の例のコードは、インラインハンドラー HandlerClass.handlerMethod を使用して function_name という名前の UDF を作成します。

    create function function_name(x integer, y integer)
      returns integer
      language java
      handler='HandlerClass.handlerMethod'
      target_path='@~/HandlerCode.jar'
      as
      $$
          class HandlerClass {
              public static int handlerMethod(int x, int y) {
                return x + y;
              }
          }
      $$;
    
    Copy

    次に、関数を作成するときに必要な、または通常使用される、プロパティの一部について説明します。

    • 関数名。

      UDF 名は、ハンドラーメソッドの名前と一致する必要はありません。CREATE FUNCTIONステートメントは、UDF名をハンドラーに関連付けます。

      名前の制約と規則の詳細については、 プロシージャおよび UDFs の命名とオーバーロード をご参照ください。

    • 関数の引数(存在する場合)。

      UDFs およびストアドプロシージャの引数の定義 をご参照ください。

    • RETURNS 句を使用した戻り型。

      スカラー戻り値の場合、 RETURNS 句は単一の戻り型を指定します。表形式の戻り値の場合、 RETURNS は、表形式内にある戻り値の列の型を指定する TABLE キーワードを指定します。

      Snowflakeが SQL データ型をハンドラーデータ型にマップする方法については、 プロシージャおよび UDFs の命名とオーバーロード をご参照ください。

    • HANDLER 句を使用したハンドラー名。

      必要な場合、これは UDF が呼び出されたときに実行されるコードを含むクラスまたはメソッドの名前です。JavaおよびPythonで記述されたハンドラーの場合にのみ、ハンドラー名を指定する必要があります。JavaScript および SQL ハンドラーの場合、インラインで指定されたすべてのコードがハンドラーとして実行されます。

      次のテーブルは、ハンドラー言語と関数の型に基づく HANDLER 句の値の形式を示しています。

      ハンドラー言語

      UDF

      UDTF

      Java

      クラスとメソッド名。

      例: MyClass.myMethod

      クラス名のみ。ハンドラーメソッド名は、必要なインターフェイスによって事前に決定されます。

      JavaScript

      なし。

      なし。

      Python

      クラスが使用されている場合は、クラスとメソッド名。それ以外の場合は、関数名。

      例: module.my_function または my_function

      クラス名のみ。ハンドラーメソッド名は、必要なインターフェイスによって事前に決定されます。

      SQL

      なし。

      なし。

    • IMPORTS または PACKAGES 句を使用したハンドラーが必要とする依存関係(存在する場合)。

      ハンドラーで依存関係を利用できるようにする方法の詳細については、 コードで依存関係を利用できるようにする方法 をご参照ください。

    • RUNTIME_VERSION 句を使用したハンドラー言語ランタイム。

      ハンドラー言語がJavaまたはPythonの場合は、 RUNTIME_VERSION 句を使用して、使用するサポートされているランタイムバージョンを指定します。句を省略すると、Snowflakeに対してデフォルトを使用するように求められますが、これは将来変更される可能性があります。