Référence rapide : APIs Snowpark Java pour commandes SQL¶
Cette rubrique fournit une référence rapide de certaines des APIs Snowpark qui correspondent aux commandes SQL.
(Notez que ce n’est pas une liste complète des APIs qui correspondent aux commandes SQL).
Dans ce chapitre :
Exécution des requêtes¶
Sélection de colonnes¶
Pour sélectionner des colonnes spécifiques, utilisez select.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Renommage de colonnes¶
Pour renommer une colonne, utilisez as ou alias.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Filtrage des données¶
Pour filtrer les données, utilisez filter ou where.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Tri des données¶
Pour trier les données, utilisez sort.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Limitation du nombre de lignes retournées¶
Pour limiter le nombre de lignes retournées, utilisez limit. Voir Limitation du nombre de lignes dans un DataFrame.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Exécution de jointures¶
Pour effectuer une jointure, utilisez join ou naturalJoin. Voir Joindre des DataFrames.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Interrogation de données semi-structurées¶
Pour parcourir des données semi-structurées, utilisez subField(« <field_name> ») et subField(<index>). Voir Utilisation de données semi-structurées.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Regroupement et agrégation de données¶
Pour regrouper des données, utilisez groupBy. Cela renvoie un objet RelationalGroupedDataFrame, que vous pouvez utiliser pour effectuer les agrégations.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Appel des fonctions de fenêtre¶
Pour appeler une fonction de fenêtre, utilisez les méthodes de l’objet Window pour créer un objet WindowSpec, que vous pourrez utiliser à votre tour pour les fonctions de fenêtre (de la même manière que pour “<function> OVER … PARTITION BY … ORDER BY”).
Exemple d’une instruction SQL |
Exemple de code 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();
|
Mise à jour, suppression et fusion des lignes¶
Pour mettre à jour, supprimer et fusionner les lignes d’une table, utilisez Updatable. Voir Mise à jour, suppression et fusion des lignes d’une table.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Utilisation des zones de préparation¶
Pour plus d’informations sur l’utilisation de zones de préparation, voir Travailler avec des fichiers dans une zone de préparation.
Chargement et téléchargement de fichiers à partir d’une zone de préparation¶
Pour charger et télécharger des fichiers à partir d’une zone de préparation, utilisez FileOperation. Voir Chargement et téléchargement de fichiers dans une zone de préparation.
Exemple d’une instruction SQL |
Exemple de code 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());
}
|
Lecture des données de fichiers dans une zone de préparation¶
Pour lire les données de fichiers dans une zone de préparation, utilisez DataFrameReader pour créer un DataFrame pour les données. Voir Configuration d’un DataFrame pour des fichiers dans une zone de préparation.
Exemple d’une instruction SQL |
Exemple de code 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();
|
Copie des données de fichiers dans une zone de préparation vers une table¶
Pour copier des données de fichiers dans une zone de préparation vers une table, utilisez DataFrameReader pour créer un CopyableDataFrame pour les données, et utilisez la méthode copyInto pour copier les données dans la table. Voir Copier les données d’un fichier dans une table.
Exemple d’une instruction SQL |
Exemple de code 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");
|
Sauvegarde d’un DataFrame dans des fichiers sur une zone de préparation¶
Pour enregistrer un DataFrame dans des fichiers sur une zone de préparation, utilisez la méthode DataFrameWriter dont le nom correspond au format des fichiers que vous souhaitez utiliser. Voir Sauvegarde d’un DataFrame dans des fichiers sur une zone de préparation.
Exemple d’une instruction SQL |
Exemple de code 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");
|
Création et appel de fonctions définies par l’utilisateur (UDFs)¶
Pour créer une UDF anonyme, utilisez Functions.udf.
Pour créer une UDF temporaire ou permanente que vous pouvez appeler par son nom, utilisez UDFRegistration.registerTemporary ou UDFRegistration.registerPermanent.
Pour appeler une UDF permanente par son nom, utilisez Functions.callUDF.
Pour plus de détails, voir Création de fonctions définies par l’utilisateur (UDFs) pour DataFrames dans Java et Appel de fonctions scalaires définies par l’utilisateur (UDFs).
Exemple d’une instruction SQL |
Exemple de code 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();
|
Création et appel de procédures stockées¶
Pour un guide sur la création de procédures stockées avec Snowpark, consultez Création de procédures stockées pour DataFrames dans Java.
Pour créer une procédure temporaire anonyme ou nommée, utilisez une méthode
registerTemporary
de com.snowflake.snowpark_java.SProcRegistration.Pour créer une procédure permanente nommée, utilisez une méthode
registerPermanent
de la classe com.snowflake.snowpark_java.SProcRegistration.Pour appeler une procédure stockée, utilisez la méthode
storedProcedure
de la classe com.snowflake.snowpark_java.Session.
Exemple d’une instruction SQL |
Exemple de code 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();
|