Scalaにおける DataFrames のストアドプロシージャの作成

Snowpark API を使用すると、カスタムラムダとカスタム関数用のストアドプロシージャを作成できます。これらのストアドプロシージャを呼び出して、 DataFrame のデータを処理できます。

以下を作成することができます。

仮ストアドプロシージャの作成

現在のセッションのみで有効な仮プロシージャを作成できます。以下は仮プロシージャに該当します。

  • プロシージャを呼び出すコードにプロシージャを表現する型 com.snowflake.snowpark.StoredProcedure 変数を渡すなど、参照によって呼び出すことができる匿名プロシージャ。

  • 割り当てた名前を持つ名前付きプロシージャ。セッション内の他のコードから、プロシージャを名前で呼び出すことができます。

仮プロシージャを作成するには、 com.snowflake.snowpark.SProcRegistrationregisterTemporary メソッドのいずれかに登録します。このメソッドは、異なる数のプロシージャ引数をサポートするために複数回オーバーロードされます。

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
)
Copy

次の例のコードは、 com.snowflake.snowpark.Session クラスの storedProcedure メソッドを使用して匿名プロシージャを呼び出し、引数として sp 変数と 1 を渡します。 Session オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。

session.storedProcedure(sp, 1).show()
Copy

名前付き仮プロシージャの作成

名前付き仮プロシージャを作成するには、名前付き仮プロシージャを仮プロシージャとして登録し、引数の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)
Copy

次の例のコードは、 com.snowflake.snowpark.Session クラスの storedProcedure メソッドを使用して、 add_two プロシージャを呼び出し、引数としてプロシージャ名と 1 を渡します。 Session オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。

session.storedProcedure(procName, 1).show()
Copy

永続ストアドプロシージャの作成

永続ストアドプロシージャを作成し、 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
  )
Copy

次の例のコードは、 com.snowflake.snowpark.Session クラスの storedProcedure メソッドを使用して add_hundred プロシージャを呼び出します。呼び出しは、プロシージャ名と 1 を引数として渡します。ハンドラーで引数として使われる Session オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。

session.storedProcedure(procName, 1).show()
Copy