Acesso a dados com Scala a partir de procedimentos armazenados criados com SQL

Para acessar dados com um manipulador de procedimento armazenado escrito em Scala, use as APIs da biblioteca Snowpark.

Ao tratar uma chamada para seu procedimento armazenado em Scala, o Snowflake cria um objeto Session Snowpark e passa o objeto para o método ou função do seu procedimento armazenado.

Como no caso de procedimentos armazenados cujos manipuladores são escritos em outras linguagens, o contexto da sessão (incluindo os privilégios, o banco de dados e o esquema atuais etc.) é determinado pelo fato de o procedimento armazenado ser executado com os direitos do chamador ou do proprietário. Para obter mais detalhes, consulte Acesso e configuração do estado da sessão.

Você pode usar este objeto Session para chamar APIs na Biblioteca do Snowpark. Por exemplo, você pode criar um DataFrame para uma tabela ou executar uma instrução SQL.

Consulte o Guia do Desenvolvedor do Snowpark para Scala para obter mais informações.

Nota

Para obter mais informações sobre limitações, incluindo limitações no acesso aos dados, consulte Limitações para Scala em procedimentos armazenados criados com SQL.

Exemplo de acesso aos dados

A seguir, um exemplo de um método Scala que copia um número especificado de linhas de uma tabela para outra tabela. O método utiliza os seguintes argumentos:

  • Um objeto Session do Snowpark

  • O nome da tabela para copiar as linhas de

  • O nome da tabela para salvar as linhas para

  • O número de linhas a copiar

O método neste exemplo retorna uma cadeia de caracteres.

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

O exemplo seguinte define uma função, em vez de um método:

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