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();
Copy

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();
Copy

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:

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();
Copy

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):

  1. Construa um objeto TableFunction passando o nome da função de tabela.

  2. Chame o método tableFunction do objeto Session passando o objeto TableFunction e um Map 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
  $$
  ;
Copy

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();
Copy

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.