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