Criação de procedimentos armazenados para DataFrames em Java¶
Usando o API Snowpark, você pode criar procedimentos armazenados para sua expressão lambda personalizada em Java. 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, por exemplo, passando uma variável do tipo com.snowflake.snowpark_java.StoredProcedure representando-o 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_java.SProcRegistration. O método é sobrecarregado diversas vezes para suportar diferentes números de argumentos de procedimento. Para obter uma instância SProcRegistration
, chame o método sproc da classe com.snowflake.snowpark_java.Session.
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.
Tipos de dados de parâmetro como uma classe única ou matriz de classe
com.snowflake.snowpark_java.types.DataType
. Omita esse argumento quando o procedimento que você está criando não tiver parâmetros.Estes devem corresponder aos tipos de parâmetros definidos no procedimento.
Retorne o tipo de dados como uma classe
com.snowflake.snowpark_java.types.DataType
.
Você pode chamar o procedimento com um método storedProcedure
da classe com.snowflake.snowpark_java.Session.
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 expressão lambda. O procedimento leva um objeto Session
e um número inteiro como argumentos. O método registra um DataTypes.IntegerType
como tipo de parâmetro único e um DataTypes.IntegerType
como tipo de retorno.
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.
Session session = Session.builder().configFile("my_config.properties").create();
StoredProcedure sp =
session.sproc().registerTemporary(
(Session spSession, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
O código no exemplo a seguir chama o procedimento anônimo, 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 increment
a partir de uma expressão lambda, passando o nome do procedimento como argumento. O método registra um DataTypes.IntegerType
como tipo de parâmetro único e um DataTypes.IntegerType
como tipo de retorno.
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.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "increment";
StoredProcedure tempSP =
session.sproc().registerTemporary(
procName,
(Session session, Integer num) -> num + 1,
DataTypes.IntegerType,
DataTypes.IntegerType
);
O código no exemplo a seguir chama o procedimento increment
, 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_java.SProcRegistration. O método é sobrecarregado diversas vezes para suportar diferentes números de argumentos de procedimento.
Ao chamar registerPermanent
, você passa como argumentos o seguinte:
O nome do procedimento.
O procedimento em si como uma expressão lambda.
Tipos de dados de parâmetro como uma classe única ou matriz de classe
com.snowflake.snowpark_java.types.DataType
. Omita esse argumento quando o procedimento que você está criando não tiver parâmetros.Estes devem corresponder aos tipos de parâmetros definidos no procedimento.
O tipo de dados de retorno como uma classe
com.snowflake.snowpark_java.types.DataType
.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 registra um DataTypes.IntegerType
como tipo de parâmetro único e um DataTypes.IntegerType
como tipo de retorno. 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.
Session session = Session.builder().configFile("my_config.properties").create();
String procName = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
procName,
(Session session, Integer num) -> num + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true
);
O código no exemplo a seguir chama o procedimento add_hundred
usando um método storedProcedure
da classe com.snowflake.snowpark_java.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();