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"
}
}
次の例では、メソッドではなく関数を定義しています。
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"
}
}