Scala UDFs の紹介¶
ユーザー定義関数(UDF)のハンドラーをScalaで記述できます。ハンドラーは、 SQL で呼び出されるときに関数のロジックとして実行されます。
Snowflakeは現在、次のScalaのバージョンで UDFs の記述をサポートしています。
2.12
ハンドラーを作成した後、 SQL で UDF を作成します。SQL を使用して UDF を作成または呼び出す方法については、 UDF の作成 または UDF の呼び出し をご参照ください。
UDF ハンドラーを記述できる言語のリストを含む UDFs の概要については、 ユーザー定義関数の概要 をご参照ください。
注釈
Scalaハンドラーに関連した制限については、 Scala UDF の制限事項 をご参照ください。
Snowpark API を使用する場合は、Scalaを使用して UDF を記述することもできます。詳細については、 Scalaでの DataFrames 用ユーザー定義関数(UDFs)の作成 をご参照ください。
ハンドラーの仕組み¶
ユーザーが UDF を呼び出すと、ユーザーは UDFの名前と引数をSnowflakeに渡します。Snowflakeは、 UDF に関連付けられたハンドラーメソッドを呼び出して、 UDF のロジックを実行します。次に、ハンドラーメソッドは出力をSnowflakeに返し、Snowflakeはそれをクライアントに返します。
スカラー関数(単一の値を返す関数)の場合、 UDF は、 UDF に渡された行ごとに単一の値を返します。
ハンドラーのロジックをサポートするために、コードでハンドラーの外部にあるライブラリを呼び出すことができます。たとえば、Scalaにデータ分析コードがすでにある場合は、大抵ハンドラーコードからそれを使用できます。
Scalaでのハンドラーの記述に関する一般的な情報については、 Scala UDF ハンドラーコーディングの一般的なガイドライン をご参照ください。スカラー関数の記述については、 Scalaによる スカラー UDF の記述 をご参照ください。
例¶
次の例のコードは、ハンドラーメソッド TestFunc.echoVarchar
を使用して echo_varchar
という名前の UDF を作成します。Scalaの引数と戻り値の型は、 SQL-Scalaデータ型マッピング で説明されているマッピングに従って、Snowflakeにより SQL との間で変換されます。
CREATE OR REPLACE FUNCTION echo_varchar(x VARCHAR)
RETURNS VARCHAR
LANGUAGE SCALA
RUNTIME_VERSION = 2.12
HANDLER='TestFunc.echoVarchar'
AS
$$
class TestFunc {
def echoVarchar(x : String): String = {
return x
}
}
$$;
UDF を呼び出す¶
SELECT echo_varchar('Hello');
設計の考慮事項¶
役に立つハンドラーを設計するには、次の点に注意してください。
一般的な考慮事項。 UDFs およびプロシージャに共通する考慮事項については、 関数およびプロシージャの設計ガイドラインおよび制約 をご参照ください。
Snowflakeによって課せられた制約の範囲内にとどまる。 Snowflakeで適切に動作するハンドラーコードの設計については、 Snowflakeが課す制約内でのハンドラーの設計 をご参照ください。
SQL-Scala型マッピング。 引数と戻り値を UDF と交換する場合、Snowflakeはハンドラー言語と SQL の間で変換します。ハンドラーコードのデータ型の選択に関する詳細については、 SQL-Scalaデータ型マッピング をご参照ください。
コードのパッケージ化。 CREATE FUNCTION ステートメントを使用してインラインで、または JAR 内のコンパイル済みコードとしてステージ上でハンドラーコードを使用できるようにすることができます。相違の詳細については、 ハンドラーコードのインラインまたはステージ上での保持 をご参照ください。
sbtを使用してScalaハンドラー用にコンパイルされたコードをパッケージ化する方法については、 sbtを使用したScalaハンドラーコードのパッケージ化 をご参照ください。
コードの最適化。 行全般で共有される状態をコードが処理する場合など、ハンドラーコードの最適化については、 スカラーScala UDFs でのグローバル状態の制御 をご参照ください。
ベストプラクティス。 ベストプラクティスについては、 ベストプラクティス と UDFs とプロシージャのセキュリティプラクティス をご参照ください。
ハンドラーコード¶
基本から詳細な例まで、次のトピックでは、Scalaで UDF ハンドラーを記述する方法について説明します。
一般的なガイドライン。 エラーの処理、データ型の選択など、ハンドラーのコーディングに関する一般的な情報については、 Scala UDF ハンドラーコーディングの一般的なガイドライン をご参照ください。
スカラー関数の作成 詳細については、 Scalaによる スカラー UDF の記述 をご参照ください。
ログとイベントトレース。 ハンドラーコードの実行時にログとトレースデータを取得する方法については、 ログおよびトレースの概要 をご参照ください。
コード例 さまざまなハンドラーの例については、 Scala UDF ハンドラーの例 をご参照ください。
依存関係。 依存関係をステージにアップロードすると、実行時にコードで依存関係を利用できるようになります。詳細については、 コードで依存関係を利用できるようにする方法 をご参照ください。
ハンドラーファイルの編成。 ステージするためにコンパイルされたハンドラーコードを JAR ファイルにパッケージ化する場合は、 Scala UDF ハンドラープロジェクトとパッケージ化 の提案に従ってコードを編成および構築します。