Como chamar funções e procedimentos armazenados no Snowpark Java¶
Para processar dados em um DataFrame, você pode chamar funções SQL definidas pelo sistema, funções definidas pelo usuário e procedimentos armazenados. Este tópico explica como chamá-los no Snowpark.
Neste tópico:
Como chamar funções definidas pelo sistema¶
Se você precisar chamar funções de SQL definidas pelo sistema, use os métodos estáticos equivalentes na classe Functions.
O exemplo a seguir chama o método estático upper
na classe Functions
(o equivalente da função UPPER definida pelo sistema) para retornar os valores na coluna do nome com as letras em maiúsculas:
DataFrame df = session.table("sample_product_data");
df.select(Functions.upper(Functions.col("name"))).show();
Se uma função de SQL definida pelo sistema não estiver disponível na classe Functions
, você pode usar o método estático Functions.callUDF
para chamar a função definida pelo sistema.
Para callUDF
, passe o nome da função definida pelo sistema como o primeiro argumento. Se você precisar passar os valores das colunas para a função definida pelo sistema, defina e passe objetos Column como argumentos adicionais para o método callUDF
.
O exemplo a seguir chama a função definida pelo sistema RADIANS passando o valor da coluna degrees
:
// Call the system-defined function RADIANS() on degrees.
DataFrame dfDegrees = session.range(0, 360, 45).rename("degrees", Functions.col("id"));
dfDegrees.select(Functions.col("degrees"), Functions.callUDF("radians", Functions.col("degrees"))).show();
O método callUDF
retorna um Column
, que você pode passar para os métodos de transformação de DataFrame (por exemplo, filtro, seleção, etc.).
Como chamar funções definidas pelo usuário escalares (UDFs)¶
O método para chamar uma UDF depende de como a UDF foi criada:
Para chamar uma UDF anônima, chame o método
apply
do objeto UserDefinedFunction que foi retornado quando você criou a UDF.Os argumentos que você passa para uma UDF devem ser objetos Column objetos. Se você precisar passar um literal, use
Functions.lit()
como explicado em Como usar literais como objetos de coluna.Para chamar UDFs que você registrou pelo nome e UDFs que você criou ao executar CREATE FUNCTION, use o método estático
Functions.callUDF
.Passe o nome da UDF como o primeiro argumento e quaisquer parâmetros da UDF como argumentos adicionais.
Chamar uma UDF retorna um objeto Column
contendo o valor de retorno da UDF.
O exemplo a seguir chama a função UDF doubleUdf
passando o valor das colunas quantity
. O exemplo passa o valor de retorno de doubleUdf
para o método select
do DataFrame.
import com.snowflake.snowpark_java.types.*;
...
// Create and register a temporary named UDF
// that takes in an integer argument and returns an integer value.
UserDefinedFunction doubleUdf =
session
.udf()
.registerTemporary(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
// Call the named UDF, passing in the "quantity" column.
// The example uses withColumn to return a DataFrame containing
// the UDF result in a new column named "doubleQuantity".
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleQuantity = df.withColumn("doubleQuantity", doubleUdf.apply(Functions.col("quantity")));
dfWithDoubleQuantity.show();
Como chamar funções de tabela (funções do sistema e UDTFs)¶
Para chamar uma função de tabela ou uma função de tabela definida pelo usuário (UDTF):
Construa um objeto TableFunction passando o nome da função de tabela.
Chame o método tableFunction do objeto Session passando o objeto
TableFunction
e umMap
de nomes de argumentos e valores de entrada.
table?Function
retorna um DataFrame que contém a saída da função de tabela.
Por exemplo, suponha que você tenha executado o seguinte comando para criar uma UDTF de SQL:
CREATE OR REPLACE FUNCTION product_by_category_id(cat_id INT)
RETURNS TABLE(id INT, name VARCHAR)
AS
$$
SELECT id, name
FROM sample_product_data
WHERE category_id = cat_id
$$
;
O código a seguir chama essa UDTF e cria um DataFrame para a saída da UDTF. O exemplo imprime as primeiras 10 linhas de saída para o console.
import java.util.HashMap;
import java.util.Map;
...
Map<String, Column> arguments = new HashMap<>();
arguments.put("cat_id", Functions.lit(10));
DataFrame dfTableFunctionOutput = session.tableFunction(new TableFunction("product_by_category_id"), arguments);
dfTableFunctionOutput.show();
Se você precisar unir a saída de uma função de tabela com um DataFrame, chame o método join, que passa uma TableFunction.
Como chamar procedimentos armazenados¶
Para chamar um procedimento armazenado, use o método sql
da classe Session
. Consulte Como executar instruções SQL.