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:
Procedimentos armazenados temporários que existem apenas na sessão atual.
Procedimentos armazenados permanentes que você pode usar em outras sessões, inclusive em uma planilha do Snowflake.
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
)
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()
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)
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()
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
)
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()