Javaにおける DataFrames のストアドプロシージャの作成¶
Snowpark API を使用すると、Javaでカスタムラムダ式のストアドプロシージャを作成できます。これらのストアドプロシージャを呼び出して、 DataFrame
のデータを処理できます。
以下を作成することができます。
現在のセッション内にのみ存在する 仮ストアドプロシージャ。
Snowflakeワークシートからなど、他のセッションで使用できる 永続ストアドプロシージャ。
仮ストアドプロシージャの作成¶
現在のセッションのみで有効な仮プロシージャを作成できます。以下は仮プロシージャに該当します。
プロシージャを呼び出すコードにプロシージャを表現する型 com.snowflake.snowpark_java.StoredProcedure の変数を渡すなど、参照によって呼び出すことができる匿名プロシージャ。
割り当てた名前を持つ名前付きプロシージャ。セッション内の他のコードから、プロシージャを名前で呼び出すことができます。
仮プロシージャを作成するには、 com.snowflake.snowpark_java.SProcRegistration の registerTemporary
メソッドのいずれかに登録します。このメソッドは、異なる数のプロシージャ引数をサポートするために複数回オーバーロードされます。 SProcRegistration
インスタンスを取得するには、 com.snowflake.snowpark_java.Session クラスの sproc メソッドを呼び出します。
registerTemporary
を呼び出すときに、引数として以下を渡すことができます。
プロシージャ名(名前付きプロシージャの場合)。
プロシージャ自体をラムダ式として。
パラメーターデータ型を単一または配列
com.snowflake.snowpark_java.types.DataType
クラスとして。作成するプロシージャにパラメーターがない場合は、この引数を省略します。これらは、プロシージャで定義されているパラメータータイプに対応している必要があります。
データ型を
com.snowflake.snowpark_java.types.DataType
クラスとして返します。
com.snowflake.snowpark_java.Session クラスの storedProcedure
メソッドでプロシージャを呼び出すことができます。
匿名仮プロシージャの作成¶
匿名仮プロシージャを作成するには、名前を指定せずに匿名仮プロシージャを仮プロシージャとして登録します。Snowflakeは、使用するための非表示名を作成します。
次の例のコードは、 SProcRegistration.registerTemporary
メソッドを呼び出して、ラムダ式から匿名プロシージャを作成します。プロシージャは Session
オブジェクトと整数を引数として受け取ります。メソッドは、単一のパラメーター型として DataTypes.IntegerType
を登録し、戻り型として DataTypes.IntegerType
を登録します。
プロシージャ自体は Session
オブジェクトと整数を引数として受け取ります。 Session
引数は、呼び出し側が引数として渡す必要のない暗黙のパラメーターを表します。
Session session = Session.builder().configFile("my_config.properties").create();
StoredProcedure sp =
session.sproc().registerTemporary(
(Session spSession, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
次の例のコードは、匿名プロシージャを呼び出し、 sp
変数と 1
を引数として渡します。 Session
オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。
session.storedProcedure(sp, 1).show();
名前付き仮プロシージャの作成¶
名前付き仮プロシージャを作成するには、名前付き仮プロシージャを仮プロシージャとして登録し、引数の1つとして名前を渡します。
次の例のコードは、 registerTemporary
メソッドを呼び出して、ラムダ式から increment
という名前の仮プロシージャを作成し、引数としてプロシージャの名前を渡します。メソッドは、単一のパラメーター型として DataTypes.IntegerType
を登録し、戻り型として DataTypes.IntegerType
を登録します。
プロシージャ自体は Session
オブジェクトと整数を引数として受け取ります。 Session
引数は、呼び出し側が引数として渡す必要のない暗黙のパラメーターを表します。
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "increment";
StoredProcedure tempSP =
session.sproc().registerTemporary(
procName,
(Session session, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
以下の例のコードは、 increment
プロシージャを呼び出し、引数としてプロシージャ名と 1
を渡します。 Session
オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。
session.storedProcedure(procName, 1).show();
永続ストアドプロシージャの作成¶
永続ストアドプロシージャを作成し、 Snowflakeワークシート内から を含め、どのセッションからでも呼び出すことができます。
永続プロシージャを作成するには、 com.snowflake.snowpark_java.SProcRegistration クラスの registerPermanent
メソッドに登録します。このメソッドは、異なる数のプロシージャ引数をサポートするために複数回オーバーロードされます。
registerPermanent
を呼び出すときに、引数として以下を渡します。
プロシージャ名。
プロシージャ自体をラムダ式として。
パラメーターデータ型を単一または配列
com.snowflake.snowpark_java.types.DataType
クラスとして。作成するプロシージャにパラメーターがない場合は、この引数を省略します。これらは、プロシージャで定義されているパラメータータイプに対応している必要があります。
com.snowflake.snowpark_java.types.DataType
クラスとして返されるデータ型。Snowflakeがプロシージャをコンパイルした結果のファイルをコピーすべき既存のステージ。
Snowflakeは、依存関係やラムダ関数を含むすべての関連データをコピーします。このストアドプロシージャは現在のセッションの外でも呼び出すことができるため、永続ステージ(仮セッション)である必要があります。このプロシージャが後で中止された場合は、関連ファイルをステージから手動でドロップする必要があります。
このプロシージャが呼び出し元の権限で実行される必要があるかどうかを示すブール値。
呼び出し元の権限と所有者の権限については、 Understanding Caller's Rights and Owner's Rights Stored Procedures をご参照ください。
次の例のコードは、 registerPermanent
メソッドを呼び出して、ラムダ式から add_hundred
という永続プロシージャを作成します。
メソッドは、単一のパラメーター型として DataTypes.IntegerType
を登録し、戻り型として DataTypes.IntegerType
を登録します。プロシージャとその依存関係のために sproc_libs
と呼ばれるステージを指定します。また、プロシージャを呼び出し元の権限で実行することも指定します。
プロシージャ自体は Session
オブジェクトと整数を引数として受け取ります。 Session
引数は、呼び出し側が引数として渡す必要のない暗黙のパラメーターを表します。
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
procName,
(Session session, Integer num) -> num + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true
);
次の例のコードは、 com.snowflake.snowpark_java.Session クラスの storedProcedure
メソッドを使用して add_hundred
プロシージャを呼び出します。呼び出しは、プロシージャ名と 1
を引数として渡します。ハンドラーで引数として使われる Session
オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。
session.storedProcedure(procName, 1).show();