API Snowpark

La bibliothèque Snowpark est une bibliothèque intuitive qui permet d’interroger et de traiter des données à grande échelle dans Snowflake. En utilisant une bibliothèque pour l’un de ces trois langages, vous pouvez créer des applications qui traitent les données dans Snowflake sans les déplacer vers le système où s’exécute le code de votre application, et les traiter à l’échelle dans le cadre du moteur flexible et sans serveur de Snowflake.

Snowflake fournit actuellement des bibliothèques Snowpark pour trois langages : Java, Python et Scala.

Télécharger

Vous pouvez télécharger la bibliothèque Snowpark pour n’importe lequel des trois langages pris en charge. Pour les téléchargements, voir Télécharger le client Snowpark (centre des développeurs de Snowflake).

Fonctionnalités clés

Snowpark possède plusieurs fonctionnalités qui le distinguent des autres bibliothèques clientes, comme décrit dans les sections suivantes.

Avantages par rapport au connecteur Spark

Par rapport à l’utilisation de Connecteur Snowflake pour Spark, le développement avec Snowpark comporte les avantages suivants :

  • Prise en charge de l’interaction avec les données dans Snowflake en utilisant des bibliothèques et des modèles conçus pour différents langages sans compromettre les performances ou les fonctionnalités.

  • Prise en charge de la création de code Snowpark en utilisant des outils locaux comme Jupyter, VS Code ou IntelliJ.

  • Prise en charge du pushdown pour toutes les opérations, y compris les UDFs Snowflake. Cela signifie que Snowpark transfère toutes les transformations de données et les tâches lourdes vers le Snowflake Data Cloud, ce qui vous permet de travailler efficacement avec des données de toute taille.

  • Il n’est pas nécessaire de disposer d’un cluster séparé en dehors de Snowflake pour les calculs. Tous les calculs sont effectués dans Snowflake. La gestion de l’échelle et du calcul est assurée par Snowflake.

Possibilité de concevoir des instructions SQL avec des constructions natives

L’API de Snowpark fournit des constructions de langage de programmation pour construire des instructions SQL. Par exemple, l’API fournit une méthode select que vous pouvez utiliser pour spécifier les noms de colonnes à retourner, plutôt que d’écrire 'select column_name' sous forme de chaîne.

Bien que vous puissiez toujours utiliser une chaîne de caractères pour spécifier l’instruction SQL à exécuter, vous bénéficiez de fonctionnalités telles que le remplissage automatique et intelligent du code et la vérification des types lorsque vous utilisez les constructions du langage de programmation fournies par Snowpark.

Exemple

Le code Python de l’exemple suivant effectue une opération de sélection sur la table sample_product_data en spécifiant les colonnes id, name, et serial_number.

>>> # Import the col function from the functions module.
>>> from snowflake.snowpark.functions import col

>>> # Create a DataFrame that contains the id, name, and serial_number
>>> # columns in the "sample_product_data" table.
>>> df = session.table("sample_product_data").select(col("id"), col("name"), col("serial_number"))
>>> df.show()
Copy

Réduction du transfert de données

Les opérations Snowpark sont exécutées de manière « lazy » sur le serveur, ce qui signifie que vous pouvez utiliser la bibliothèque pour retarder l’exécution de la transformation des données aussi tard que possible dans le pipeline, tout en regroupant de nombreuses opérations en une seule. Cela réduit la quantité de données transférées entre votre client et la base de données Snowflake. Cela améliore également les performances.

L’abstraction de base dans Snowpark est le DataFrame, qui représente un ensemble de données et fournit des méthodes pour opérer sur ces données. Dans votre code client, vous construisez un objet DataFrame et le configurez pour récupérer les données que vous souhaitez utiliser (par exemple, les colonnes contenant les données, le filtre à appliquer aux lignes, etc.)

Les données ne sont pas récupérées où vous construisez l’objet DataFrame. Au lieu de cela, lorsque vous êtes prêt à récupérer les données, vous pouvez exécuter une action qui évalue les objets DataFrame et envoie les instructions SQL correspondantes à la base de données Snowflake en vue de leur exécution.

Exemple

Le code Python de l’exemple suivant définit une requête sur une table. Il appelle la méthode collect pour exécuter la requête et récupérer les résultats.

>>> # Create a DataFrame with the "id" and "name" columns from the "sample_product_data" table.
>>> # This does not execute the query.
>>> df = session.table("sample_product_data").select(col("id"), col("name"))

>>> # Send the query to the server for execution and
>>> # return a list of Rows containing the results.
>>> results = df.collect()
Copy

Possibilité de créer des UDFs en ligne

Vous pouvez créer des fonctions définies par l’utilisateur (UDFs) en ligne dans une application Snowpark. Snowpark peut pousser votre code vers le serveur, où le code peut opérer sur les données à l’échelle. Ceci est utile pour les boucles ou les fonctionnalités par lots où la création en tant qu’UDF permettra à Snowflake de paralléliser et d’appliquer la logique de code à l’échelle au sein de Snowflake.

Vous pouvez écrire des fonctions dans le même langage que celui que vous utilisez pour écrire votre code client (par exemple, en utilisant des fonctions anonymes au format Scala ou en utilisant des fonctions Lambda en Python). Pour utiliser ces fonctions afin de traiter les données de la base de données Snowflake, vous devez définir et appeler des fonctions définies par l’utilisateur (UDFs) dans votre code personnalisé.

Snowpark pousse automatiquement le code personnalisé pour les UDFs vers la base de données Snowflake. Lorsque vous appelez l’UDF dans votre code client, votre code personnalisé est exécuté sur le serveur (où se trouvent les données). Vous n’avez pas besoin de transférer les données à votre client afin d’exécuter la fonction sur les données.

Exemple

Le code Python de l’exemple suivant crée une UDF appelée my_udf et l’affecte à la variable add_one.

>>> from snowflake.snowpark.types import IntegerType
>>> add_one = udf(lambda x: x+1, return_type=IntegerType(), input_types=[IntegerType()], name="my_udf", replace=True)
Copy