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

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

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

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

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

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

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

仮プロシージャを作成するには、 com.snowflake.snowpark_java.SProcRegistrationregisterTemporary メソッドのいずれかに登録します。このメソッドは、異なる数のプロシージャ引数をサポートするために複数回オーバーロードされます。 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
  );
Copy

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

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

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

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

以下の例のコードは、 increment プロシージャを呼び出し、引数としてプロシージャ名と 1 を渡します。 Session オブジェクトは暗黙の引数で、プロシージャを呼び出すときに渡す必要はないことに注意してください。

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

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

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

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

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