Java UDFs の紹介

ユーザー定義関数(UDF)のハンドラーをJavaで記述できます。このセクションのトピックでは、Javaハンドラーを設計および記述する方法について説明します。例もあります。

UDF ハンドラーを記述できる言語のリストを含む UDFs の概要については、 ユーザー定義関数の概要 をご参照ください。

ハンドラーを作成した後、 SQL で UDF を作成します。SQL を使用して UDF を作成または呼び出す方法については、 UDF の作成 または UDF の呼び出し をご参照ください。

Snowflakeは現在、次のJavaのバージョンで、 UDFs の記述をサポートしています。

  • 11.x

注釈

Java UDF ハンドラーに関連した制限については、 Java UDF の制限事項 をご参照ください。

このトピックの内容:

Javaハンドラーの仕組み

ユーザーが UDF を呼び出すと、ユーザーは UDFの名前と引数をSnowflakeに渡します。Snowflakeは、関連付けられたハンドラーコード(存在する場合は引数付き)を呼び出して、 UDF のロジックを実行します。次に、ハンドラーメソッドは出力をSnowflakeに返し、Snowflakeはそれをクライアントに返します。

UDF に渡される行ごとに、 UDF はスカラー(つまり単一)値を返すか、テーブル関数として定義されている場合は行のセットを返します。

Java UDFs には、新しいコードと既存ライブラリへの呼び出しの両方を含めることができるため柔軟性があり、コードの再利用も可能です。たとえば、Javaにデータ分析コードがすでにある場合は、大抵Java UDF に組み込むことができます。

以下は、データフローの簡略図です。

UDF Data Flow

次の例のコードは、ハンドラーメソッド TestFunc.echoVarchar を使用して echo_varchar という名前の UDF を作成します。Javaの引数と戻り値の型は、 SQL-Javaデータ型マッピング で説明されているマッピングに従って、Snowflakeにより SQL との間で変換されます。

create or replace function echo_varchar(x varchar)
returns varchar
language java
called on null input
handler='TestFunc.echoVarchar'
target_path='@~/testfunc.jar'
as
'class TestFunc {
  public static String echoVarchar(String x) {
    return x;
  }
}';
Copy

設計の考慮事項

役に立つハンドラーを設計するには、次の点に注意してください。

ハンドラーコード

基本から詳細な例まで、次のトピックでは、Javaで UDF ハンドラーを記述する方法について説明します。

  • Javaクラスの定義。 UDF のロジックをJavaクラスに記述します。Snowflakeがコードとやり取りする方法の詳細については、 クラスの設計 をご参照ください。

  • エラー処理。 Snowflakeがハンドラーによって生成されたエラーをどのように表示するかについては、 エラーの処理 をご参照ください。

  • 表形式の戻り値。 UDF から表形式の値とスカラー(単一)値を返すことができます。表形式の値を返すハンドラーを記述する方法については、 表形式のJava UDFs (UDTFs) をご参照ください。

  • ログとイベントトレース。 ハンドラーコードの実行時にログとトレースデータを取得する方法については、 ログおよびトレースの概要 をご参照ください。

  • 依存関係。 依存関係をステージにアップロードすると、実行時にコードで依存関係を利用できるようになります。詳細については、 コードで依存関係を利用できるようにする方法 をご参照ください。

  • ハンドラーファイルの編成。 コンパイルされたハンドラーコードを JAR ファイルにパッケージ化する場合は、 ファイルの整理 の提案に従ってコードを編成およびビルドします。

  • コード例 Javaでのさまざまなハンドラーの例については、 Java UDF ハンドラーの例 をご参照ください。