SQL で作成したストアドプロシージャからScalaでデータにアクセスします。

Scalaで書かれたストアドプロシージャハンドラーでデータにアクセスするには、Snowparkライブラリ APIs を使用します。

Scalaストアドプロシージャへの呼び出しを処理する場合、Snowflakeは、Snowpark Session オブジェクトを作成し、そのオブジェクトをストアドプロシージャのメソッドまたは関数に渡します。

ハンドラーが他の言語で書かれたストアドプロシージャの大文字と小文字の場合と同様に、セッションのコンテキスト(権限、現在のデータベースとスキーマなどを含む)は、ストアドプロシージャが呼び出し元の権限で実行されるか、所有者の権限で実行されるかによって決まります。詳細については、 セッション状態へのアクセスおよび設定 をご参照ください。

この Session オブジェクトを使用して、 Snowparkライブラリ の APIs を呼び出すことができます。たとえば、 テーブルの DataFrame を作成 したり、 SQL ステートメントを実行したりできます。

詳細については、 Scala用Snowpark開発者ガイド をご参照ください。

注釈

データへのアクセスの制限など、制限については、 SQL で作成されたストアドプロシージャにおける Scala の制限。 をご参照ください。

データアクセスの例

以下は、指定された数の行を1つのテーブルから別のテーブルにコピーするScalaメソッドの例です。このメソッドは次の引数を取ります。

  • Snowpark Session オブジェクト

  • 行をコピーするテーブルの名前

  • 行を保存するテーブルの名前

  • コピーする行の数。

この例のメソッドは文字列を返します。

object MyObject
{
  def myProcedure(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    return "Success"
  }
}
Copy

次の例では、メソッドではなく関数を定義しています。

object MyObject
{
  val myProcedure = (session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =>
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    "Success"
  }
}
Copy