Referência rápida: APIs do Snowpark Java para comandos SQL¶
Este tópico fornece uma referência rápida de algumas das APIs do Snowpark que correspondem a comandos SQL.
(Note que esta não é uma lista completa das APIs que correspondem a comandos SQL).
Neste tópico:
Como realizar consultas¶
Como selecionar colunas¶
Para selecionar colunas específicas, use select.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT id, name FROM sample_product_data;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSelectedCols = df.select(Functions.col("id"), Functions.col("name"));
dfSelectedCols.show();
|
Como renomear colunas¶
Para renomear uma coluna, use as ou alias.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT id AS item_id FROM sample_product_data;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfRenamedCol = df.select(Functions.col("id").as("item_id"));
dfRenamedCol.show();
|
DataFrame df = session.table("sample_product_data");
DataFrame dfRenamedCol = df.select(Functions.col("id").alias("item_id"));
dfRenamedCol.show();
|
Como filtrar dados¶
Para filtrar dados, use filter ou where.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT * FROM sample_product_data WHERE id = 1;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfFilteredRows = df.filter(Functions.col("id").equal_to(Functions.lit(1)));
dfFilteredRows.show();
|
DataFrame df = session.table("sample_product_data");
DataFrame dfFilteredRows = df.where(Functions.col("id").equal_to(Functions.lit(1)));
dfFilteredRows.show();
|
Como ordenar os dados¶
Para ordenar os dados, use sort.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT * FROM sample_product_data ORDER BY category_id;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSorted = df.sort(Functions.col("category_id"));
dfSorted.show();
|
Como limitar o número de linhas retornadas¶
Para limitar o número de linhas retornadas, use limit. Consulte Como limitar o número de linhas em um DataFrame.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT * FROM sample_product_data
ORDER BY category_id LIMIT 2;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSorted = df.sort(Functions.col("category_id")).limit(2);
Row[] arrayRows = dfSorted.collect();
|
Como realizar junções¶
Para realizar uma junção, use join ou naturalJoin. Consulte Junção de DataFrames.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT * FROM sample_a
INNER JOIN sample_b
on sample_a.id_a = sample_b.id_a;
|
DataFrame dfLhs = session.table("sample_a");
DataFrame dfRhs = session.table("sample_b");
DataFrame dfJoined =
dfLhs.join(dfRhs, dfLhs.col("id_a").equal_to(dfRhs.col("id_a")));
dfJoined.show();
|
SELECT * FROM sample_a NATURAL JOIN sample_b;
|
DataFrame dfLhs = session.table("sample_a");
DataFrame dfRhs = session.table("sample_b");
DataFrame dfJoined = dfLhs.naturalJoin(dfRhs);
dfJoined.show();
|
Consulta de dados semiestruturados¶
Para percorrer dados semiestruturados, use subField(«<field_name>») e subField(<index>). Consulte Como trabalhar com dados semiestruturados.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT src:salesperson.name FROM car_sales;
|
DataFrame df = session.table("car_sales");
DataFrame dfJsonField =
df.select(Functions.col("src").subField("salesperson").subField("name"));
dfJsonField.show();
|
Agrupamento e agregação de dados¶
Para agrupar dados, use groupBy. Isso retorna um objeto RelationalGroupedDataFrame que você pode usar para realizar as agregações.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT category_id, count(*)
FROM sample_product_data GROUP BY category_id;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfCountPerCategory = df.groupBy(Functions.col("category_id")).count();
dfCountPerCategory.show();
|
Como chamar funções de janela¶
Para chamar uma função de janela, use os métodos do objeto Window para construir um objeto WindowSpec, que por sua vez você pode usar para funções de janela (semelhante ao uso de “<function> OVER … PARTITION BY … ORDER BY”).
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
SELECT category_id, id, SUM(amount) OVER
(PARTITION BY category_id ORDER BY product_date)
FROM sample_product_data ORDER BY product_date;
|
WindowSpec window = Window.partitionBy(
Functions.col("category_id")).orderBy(Functions.col("product_date"));
DataFrame df = session.table("sample_product_data");
DataFrame dfCumulativePrices = df.select(
Functions.col("category_id"), Functions.col("product_date"),
Functions.sum(Functions.col("amount")).over(window)).sort(Functions.col("product_date"));
dfCumulativePrices.show();
|
Atualização, exclusão e fusão de linhas¶
Para atualizar, excluir e fundir linhas em uma tabela, use Updatable. Consulte Atualização, eliminação e fusão de linhas em uma tabela.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
UPDATE sample_product_data
SET serial_number = 'xyz' WHERE id = 12;
|
import java.util.HashMap;
import java.util.Map;
...
Map<Column, Column> assignments = new HashMap<>();
assignments.put(Functions.col("serial_number"), Functions.lit("xyz"));
Updatable updatableDf = session.table("sample_product_data");
UpdateResult updateResult =
updatableDf.update(
assignments,
Functions.col("id").equal_to(Functions.lit(12)));
System.out.println("Number of rows updated: " + updateResult.getRowsUpdated());
|
DELETE FROM sample_product_data
WHERE category_id = 50;
|
Updatable updatableDf = session.table("sample_product_data");
DeleteResult deleteResult =
updatableDf.delete(updatableDf.col("category_id").equal_to(Functions.lit(50)));
System.out.println("Number of rows deleted: " + deleteResult.getRowsDeleted());
|
MERGE INTO target_table USING source_table
ON target_table.id = source_table.id
WHEN MATCHED THEN
UPDATE SET target_table.description =
source_table.description;
|
import java.util.HashMap;
import java.util.Map;
Map<String, Column> assignments = new HashMap<>();
assignments.put("description", source.col("description"));
MergeResult mergeResult =
target.merge(source, target.col("id").equal_to(source.col("id")))
.whenMatched.updateColumn(assignments)
.collect();
|
Como trabalhar com estágios¶
Para obter mais informações sobre como trabalhar com estágios, consulte Como trabalhar com arquivos em um estágio.
Como carregar e baixar arquivos de um estágio¶
Para carregar e baixar arquivos de um estágio, use FileOperation. Consulte Carregamento e descarregamento de arquivos em um estágio.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
PUT file:///tmp/*.csv @myStage OVERWRITE = TRUE;
|
import java.util.HashMap;
import java.util.Map;
...
Map<String, String> putOptions = new HashMap<>();
putOptions.put("OVERWRITE", "TRUE");
PutResult[] putResults = session.file().put(
"file:///tmp/*.csv", "@myStage", putOptions);
for (PutResult result : putResults) {
System.out.println(result.getSourceFileName() + ": " + result.getStatus());
}
|
GET @myStage file:///tmp PATTERN = '.*.csv.gz';
|
import java.util.HashMap;
import java.util.Map;
...
Map<String, String> getOptions = new HashMap<>();
getOptions.put("PATTERN", "'.*.csv.gz'");
GetResult[] getResults = session.file().get(
"@myStage", "file:///tmp", getOptions);
for (GetResult result : getResults) {
System.out.println(result.getFileName() + ": " + result.getStatus());
}
|
Como ler dados de arquivos em um estágio¶
Para ler dados de arquivos em um estágio, use o DataFrameReader para criar um DataFrame para os dados. Consulte Como configurar um DataFrame para arquivos em um estágio.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
CREATE FILE FORMAT snowpark_temp_format TYPE = JSON;
SELECT "$1"[0]['salesperson']['name'] FROM (
SELECT $1::VARIANT AS "$1" FROM @mystage/car_sales.json(
FILE_FORMAT => 'snowpark_temp_format')) LIMIT 10;
DROP FILE FORMAT snowpark_temp_format;
|
DataFrame df = session.read().json(
"@mystage/car_sales.json").select(
Functions.col("$1").subField(0).subField("salesperson").subField("name"));
df.show();
|
Como copiar dados de arquivos em um estágio para uma tabela¶
Para copiar dados de arquivos em uma estágio para uma tabela, use DataFrameReader para criar um CopyableDataFrame para os dados e use o método copyInto para copiar os dados para a tabela. Consulte Como copiar dados de arquivos para uma tabela.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
COPY INTO new_car_sales
FROM @mystage/car_sales.json
FILE_FORMAT = (TYPE = JSON);
|
CopyableDataFrame dfCopyableDf = session.read().json("@mystage/car_sales.json");
dfCopyableDf.copyInto("new_car_sales");
|
Como salvar um DataFrame para arquivos em um estágio¶
Para salvar um DataFrame em arquivos em um estágio, use o método DataFrameWriter nomeado com o formato dos arquivos que você deseja usar. Consulte Como salvar um DataFrame para arquivos em um estágio.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
COPY INTO @mystage/saved_data.json
FROM ( SELECT * FROM (car_sales) )
FILE_FORMAT = ( TYPE = JSON COMPRESSION = 'none' )
OVERWRITE = TRUE
DETAILED_OUTPUT = TRUE
|
DataFrame df = session.table("car_sales");
WriteFileResult writeFileResult = df.write().mode(
SaveMode.Overwrite).option(
"DETAILED_OUTPUT", "TRUE").option(
"compression", "none").json(
"@mystage/saved_data.json");
|
Como criar e chamar funções definidas pelo usuário (UDFs)¶
Para criar uma UDF anônima, use Functions.udf.
Para criar uma UDF temporária ou permanente que você pode chamar pelo nome, use UDFRegistration.registerTemporary ou UDFRegistration.registerPermanent.
Para chamar uma UDF permanente pelo nome, use Functions.callUDF.
Para obter mais detalhes, consulte Criação de funções definidas pelo usuário (UDFs) para DataFrames em Java e Como chamar funções definidas pelo usuário escalares (UDFs).
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
CREATE FUNCTION <temp_function_name>
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
<temp_function_name>(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
Functions.udf(
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
doubleUdf.apply(Functions.col("quantity")));
dfWithDoubleNum.show();
|
CREATE FUNCTION <temp_function_name>
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
<temp_function_name>(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
session
.udf()
.registerTemporary(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
Functions.callUDF("doubleUdf", Functions.col("quantity")));
dfWithDoubleNum.show();
|
CREATE FUNCTION doubleUdf(arg1 INT)
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
doubleUdf(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
session
.udf()
.registerPermanent(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType,
"mystage");
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
Functions.callUDF("doubleUdf", Functions.col("quantity")));
dfWithDoubleNum.show();
|
Como criar e chamar procedimentos armazenados¶
Para obter um guia sobre como criar procedimentos armazenados com o Snowpark, consulte Criação de procedimentos armazenados para DataFrames em Java.
Para criar um procedimento anônimo ou temporário nomeado, use um método
registerTemporary
de com.snowflake.snowpark_java.SProcRegistration.Para criar um procedimento nomeado permanente, use um método
registerPermanent
da classe com.snowflake.snowpark_java.SProcRegistration.Para chamar um procedimento, use o método
storedProcedure
da classe com.snowflake.snowpark_java.Session.
Exemplo de uma instrução SQL |
Exemplo de código do Snowpark |
---|---|
CREATE PROCEDURE <temp_procedure_name>(x INTEGER, y INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + y;
END
$$
;
CALL <temp_procedure_name>(2, 3);
|
StoredProcedure sp =
session.sproc().registerTemporary((Session session, Integer x, Integer y) -> x + y,
new DataType[] {DataTypes.IntegerType, DataTypes.IntegerType},
DataTypes.IntegerType);
session.storedProcedure(sp, 2, 3).show();
|
CREATE PROCEDURE sproc(x INTEGER, y INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + y;
END
$$
;
CALL sproc(2, 3);
|
String name = "sproc";
StoredProcedure sp =
session.sproc().registerTemporary(name,
(Session session, Integer x, Integer y) -> x + y,
new DataType[] {DataTypes.IntegerType, DataTypes.IntegerType},
DataTypes.IntegerType);
session.storedProcedure(name, 2, 3).show();
|
CREATE PROCEDURE add_hundred(x INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + 100;
END
$$
;
CALL add_hundred(3);
|
String name = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
name,
(Session session, Integer x) -> x + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true);
session.storedProcedure(name, 3).show();
|