Criação de procedimentos armazenados para DataFrames em Scala

Usando o API Snowpark, você pode criar procedimentos armazenados para lambdas e funções personalizadas. Você pode chamar esses procedimentos armazenados para processar os dados em DataFrame.

Você pode criar:

Criação de um procedimento armazenado temporário

Você pode criar um procedimento temporário que durará apenas a sessão atual. O procedimento temporário pode ser:

  • Um procedimento anônimo que você pode chamar por referência, como passar uma variável com.snowflake.snowpark.StoredProcedure que o representa para o código que chama o procedimento.

  • Um procedimento nomeado com um nome atribuído por você. Você pode chamar o procedimento pelo nome de outro código na sessão.

Para criar um procedimento temporário, registre-o com um dos registerTemporary métodos de com.snowflake.snowpark.SProcRegistration. O método é sobrecarregado diversas vezes para suportar diferentes números de argumentos de procedimento.

Ao chamar registerTemporary, você pode passar o seguinte como argumentos:

  • O nome do procedimento (quando for um procedimento nomeado).

  • O procedimento em si como uma expressão lambda.

Como criar um procedimento temporário anônimo

Para criar um procedimento temporário anônimo, registre-o como procedimento temporário sem especificar um nome. Snowflake criará um nome oculto para seu próprio uso.

O código no exemplo a seguir chama o método SProcRegistration.registerTemporary para criar um procedimento anônimo a partir de uma função lambda. A própria função receberá um objeto Session e um número inteiro como argumentos. O argumento Session representa um parâmetro implícito que os chamadores não precisam passar como argumento.

val session = Session.builder.configFile("my_config.properties").create

val sp = session.sproc.registerTemporary(
  (session: Session, num: Int) => num + 1
)
Copy

O código no exemplo a seguir chama o procedimento anônimo usando o método storedProcedure da classe com.snowflake.snowpark.Session, passando a variável sp e 1 como seus argumentos. Observe que o objeto Session é um argumento implícito que você não precisa passar ao chamar o procedimento.

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

Criação de um procedimento temporário nomeado

Para criar um procedimento temporário nomeado, você o registra como procedimento temporário, passando seu nome como um dos argumentos.

O código no exemplo a seguir chama o método registerTemporary para criar um procedimento temporário nomeado chamado add_two a partir de uma expressão lambda, passando o nome do procedimento como argumento. O método registra um Int como tipo de parâmetro único.

O procedimento em si pegará um objeto Session e um número inteiro como argumentos. O argumento Session representa um parâmetro implícito que os chamadores não precisam passar como argumento.

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

O código no exemplo a seguir chama o procedimento add_two usando um método storedProcedure da classe com.snowflake.snowpark.Session, passando o nome do procedimento e 1 como seus argumentos. Observe que o objeto Session é um argumento implícito que você não precisa passar ao chamar o procedimento.

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

Criação de um procedimento armazenado permanente

Você pode criar um procedimento armazenado permanente que pode ser chamado de qualquer sessão, inclusive de uma planilha do Snowflake.

Para criar um procedimento permanente, registre-o com um método registerPermanent da classe com.snowflake.snowpark.SProcRegistration. O método é sobrecarregado diversas vezes para oferecer suporte a uma variedade de requisitos de procedimento.

Ao chamar registerPermanent, você passa como argumentos o seguinte:

  • O nome do procedimento.

  • O procedimento em si como uma expressão lambda.

  • Um estágio existente para o qual o Snowflake deve copiar os arquivos resultantes da compilação do procedimento.

    Snowflake copiará todos os dados relacionados, incluindo dependências e funções lambda. Este deve ser um estágio permanente (não temporário da sessão) porque esse procedimento armazenado pode ser invocado fora da sessão atual. Se o procedimento for interrompido posteriormente, você deverá remover manualmente os arquivos relacionados do estágio.

  • Um valor booleano que indica se este procedimento deve ser executado com os direitos do chamador.

    Para saber mais sobre os direitos do chamador e os direitos do proprietário, consulte Understanding Caller’s Rights and Owner’s Rights Stored Procedures.

O código no exemplo a seguir chama o método registerPermanent para criar um procedimento permanente chamado add_hundred a partir de uma expressão lambda.

O método especifica um estágio chamado sproc_libs para o procedimento e suas dependências. Também especifica que o procedimento deve ser executado com os direitos do chamador.

O procedimento em si pegará um objeto Session e um número inteiro como argumentos. O argumento Session representa um parâmetro implícito que os chamadores não precisam passar como argumento.

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

O código no exemplo a seguir chama o procedimento add_hundred usando um método storedProcedure da classe com.snowflake.snowpark.Session. A chamada passa o nome do procedimento e 1 como seus argumentos. Observe que o objeto Session usado no manipulador como argumento é um argumento implícito que você não precisa passar ao chamar o procedimento.

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