Écriture de code Snowpark dans des feuilles de calcul Python

Écrivez le code Snowpark dans des feuilles de calcul Python pour traiter les données à l’aide de Snowpark Python dans Snowsight. En écrivant du code dans des feuilles de calcul Python, vous pouvez effectuer votre développement et vos tests dans Snowflake sans avoir à installer de bibliothèques dépendantes.

Pour effectuer du développement avec des feuilles de calcul Python, procédez comme suit :

  1. Préparez les rôles et les packages dans Snowflake.

  2. Configurez votre feuille de calcul pour le développement.

  3. Écrivez du code Snowpark dans votre feuille de calcul Python.

  4. Exécutez votre feuille de calcul Python.

Par exemple, vous pouvez écrire du code dans une feuille de calcul Python qui extrait des données de zones de préparation ou d’objets de base de données dans Snowflake, transforme les données et stocke les données transformées dans Snowflake. Vous pouvez ensuite déployer ce code en une procédure stockée et créer un pipeline de données, le tout sans quitter Snowflake.

Dans ce chapitre :

À propos des feuilles de calcul Python

Les feuilles de calcul Python vous permettent d’utiliser Snowpark Python dans Snowsight pour effectuer des manipulations et des transformations de données. Vous pouvez utiliser des paquets tiers listés dans le canal Snowflake Anaconda ou importer vos propres fichiers Python à partir de zones de préparation pour les utiliser dans des scripts.

Après avoir exécuté une feuille de calcul Python, examinez les résultats et la sortie renvoyés par votre script. Les résultats s’affichent sous forme de chaîne, de variante ou de tableau, selon votre code. Voir Exécution de feuilles de calcul Python.

Note

Étant donné que les feuilles de calcul Python s’exécutent dans Snowflake plutôt que dans votre environnement de développement local, vous ne pouvez pas utiliser session.add_import pour ajouter un fichier dont dépend votre code Python, ou session.add_packages ou session.add_requirements pour ajouter des paquets que vous devez utiliser dans votre code Python. Au lieu de cela, vous ajoutez ces fichiers à une zone de préparation et vous les référencez dans votre code. Voir Mise des fichiers en zone de préparation en utilisant Snowsight.

Les feuilles de calcul Python présentent les limitations suivantes :

  • Les niveaux de journal inférieurs à WARN n’apparaissent pas dans la Output pour une feuille de calcul Python par défaut. Pour consigner des messages de niveau inférieur à la sortie, utilisez une bibliothèque de journalisation telle que le module logging pour définir le niveau des messages consignés.

  • Pas de prise en charge des points d’arrêt ou exécution uniquement de parties du code Python dans une feuille de calcul.

  • Pas de prise en charge des images ou de pages Web. Les images ou les pages Web générées par du code Python ne peuvent pas être affichées dans les feuilles de calcul Python.

  • Les feuilles de calcul Python utilisent Python 3.8.

Si vous avez besoin d’assistance pour l’une de ces options, envisagez plutôt d’utiliser votre environnement de développement local. Voir Configuration de votre environnement de développement pour Snowpark Python.

Prérequis pour les feuilles de calcul Python

Pour utiliser les feuilles de calcul Python, vous devez procéder comme suit :

Lisez et acceptez les conditions d’utilisation d’Anaconda

Avant de commencer à utiliser les packages fournis par Anaconda dans Snowflake, vous devez accepter les Conditions de tiers de Snowflake.

Note

Vous devez être l’administrateur de l’organisation (utilisez le rôle ORGADMIN) pour accepter les conditions. Vous ne devez accepter les conditions qu’une seule fois pour votre compte Snowflake. Voir Activation du rôle ORGADMIN dans un compte.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Billing & Terms.

  3. Dans la section Anaconda, sélectionnez Enable.

  4. Dans la boîte de dialogue Anaconda Packages , cliquez sur le lien pour consulter la page des conditions de tiers de Snowflake.

  5. Si vous acceptez les conditions, sélectionnez Acknowledge & Continue.

Si une erreur apparaît lorsque vous essayez d’accepter les conditions d’utilisation, il se peut qu’il manque un prénom, un nom ou une adresse e-mail dans votre profil d’utilisateur. Si vous avez un rôle d’administrateur, reportez-vous aux Ajouter des détails sur l’utilisateur à votre profil d’utilisateur pour mettre à jour votre profil à l’aide de Snowsight. Sinon, contactez un administrateur pour mettre à jour votre compte.

Ajouter un fichier Python d’une zone de préparation à une feuille de calcul

Snowflake inclut les paquets Snowpark du canal Snowflake Anaconda dans les feuilles de calcul Python.

Si vous souhaitez utiliser d’autres fichiers ou paquets Python que ceux inclus dans Anaconda dans votre feuille de calcul Python, vous devez télécharger les fichiers vers une zone de préparation nommée dans Snowflake, puis les ajouter à la liste des paquets installés de votre feuille de calcul Python.

Pour utiliser un paquet Python dans votre feuille de calcul, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Sélectionnez + » Python Worksheet.

  4. Sélectionnez une base de données et un schéma.

  5. Sélectionnez Packages » Stage Packages.

  6. Entrez le chemin d’accès au paquet dans la zone de préparation :

    • Si la base de données et le schéma sélectionnés pour la feuille de calcul contiennent la zone de préparation où se trouve le paquet, vous pouvez faire référence à la zone de préparation à l’aide d’un nom non qualifié. Par exemple, @YourStage/path/to/example_package.py.

    • Pour faire référence à une zone de préparation dans une base de données et un schéma différents, qualifiez entièrement le nom de la zone de préparation. Par exemple, @Database.Schema.Stage/path/to/other_package.py.

  7. Sélectionnez Import pour ajouter votre paquet à la liste des paquets installés.

  8. Vous pouvez ensuite utiliser les instructions import pour utiliser le paquet dans votre feuille de calcul Python. Par exemple, après avoir importé les paquets des fichiers example_package.py et other_package.py, écrivez le code suivant pour importer une fonction appelée function du fichier example_package, et importez le paquet other_package pour l’utiliser dans votre code :

    from example_package import function
    import other_package
    
    Copy

Note

Les paquets que vous ajoutez à une feuille de calcul ne sont disponibles que pour cette feuille de calcul. Si vous souhaitez utiliser le même paquet dans une autre feuille de calcul Python, suivez ces étapes pour ajouter le paquet à cette feuille de calcul.

Pour plus de détails, voir Mettre les dépendances à la disposition de votre code.

Commencez à développer avec des feuilles de calcul Python

Pour ouvrir une feuille de calcul et configurer votre environnement de développement, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Sélectionnez + » Python Worksheet.

  4. Sélectionnez une base de données et un schéma.

  5. Sélectionnez un entrepôt à utiliser pour exécuter la feuille de calcul. Si vous avez un entrepôt par défaut pour votre utilisateur, il est présélectionné.

    Les feuilles de calcul Python nécessitent un entrepôt en cours d’exécution pour charger les packages Python et exécuter le code Python.

  6. (Facultatif) Sélectionnez Packages pour installer les bibliothèques Python.

    • Le paquet snowflake-snowpark-python est nécessaire et toujours installé pour les feuilles de calcul Python.

    • Recherchez les paquets listés dans le canal Snowflake Anaconda, tels que numpy, pandas, requests, et urllib3. Sélectionnez un paquet pour l’installer et l’utiliser dans votre feuille de calcul, et modifiez éventuellement la version du paquet par défaut dans la liste des Installed Packages.

    • Ajoutez vos propres paquets et fichiers Python en sélectionnant Stage Packages et en spécifiant le chemin d’accès au fichier de la zone de préparation et du paquet, puis en sélectionnant Import. Voir Ajouter un fichier Python d’une zone de préparation à une feuille de calcul.

    Les paquets que vous avez installés apparaissent sous Installed Packages.

  7. Si vous avez installé des bibliothèques Python pour votre feuille de calcul, ajoutez des instructions import à votre code pour utiliser les bibliothèques installées.

    Par exemple, si vous installez le paquet scikit-learn pour votre feuille de calcul Python, ajoutez une instruction import pour ce paquet au début de votre code

    import scikit-learn
    
    Copy
  8. Exécutez l’exemple de code Python pour valider votre configuration.

Les messages d’erreur ou la valeur de retour de votre code s’affichent dans la section Results. Pour afficher les messages du journal, sélectionnez Output. Voir Exécution de feuilles de calcul Python.

Écriture de code Snowpark dans des feuilles de calcul Python

Après avoir suivi les étapes pour commencer à développer avec des feuilles de calcul Python, vous pouvez remplacer le code d’exemple par le vôtre.

Écrivez votre code Snowpark Python dans la fonction de gestionnaire :

import snowflake.snowpark as snowpark

def main(session: snowpark.Session):
    # your code goes here
Copy

La fonction de gestionnaire par défaut est main, mais vous pouvez la modifier dans les Settings de la feuille de calcul. Le gestionnaire actif est mis en évidence dans la feuille de calcul.

Utilisez l’objet session fourni dans le code réutilisable pour accéder aux données dans Snowflake avec les bibliothèques d’API Snowpark. Par exemple, vous pouvez créer un DataFrame pour une table ou exécuter une instruction SQL. Voir le Guide du développeur Snowpark pour Python.

Au fur et à mesure que vous tapez du texte, vous voyez la saisie semi-automatique pour les méthodes Python, les variables définies, etc. Vous ne voyez pas la saisie semi-automatique pour certains paquets ou fichiers tiers importés à partir d’une zone de préparation. Les feuilles de calcul Python incluent également la coloration syntaxique et des conseils pour les paramètres de méthode. Vous pouvez configurer le linting et le retour à la ligne dans les Settings de la feuille de calcul.

Renvoyer les résultats d’un type de données différent

Lorsque vous écrivez votre code Python, tenez compte du type de données renvoyé par l’instruction return dans votre code et ajustez la manière dont la feuille de calcul renvoie les résultats. Par défaut, une feuille de calcul Python a un type de retour de Table() car le code de caractère de remplacement renvoie un DataFrame.

En fonction de ce que votre code Python renvoie, vous souhaiterez peut-être modifier les paramètres de la feuille de calcul pour afficher la sortie différemment :

  • Si votre fonction de gestionnaire renvoie un DataFrame, utilisez le type de retour par défaut de Table().

  • Si votre fonction de gestionnaire renvoie une liste d’objets Row comme avec la méthode collect , remplacez le type de retour par Variant.

  • Si votre fonction de gestionnaire renvoie une chaîne, telle que return "Hello Python", ou une valeur que vous souhaitez convertir en chaîne, remplacez le type de retour par String.

  • Si votre fonction de gestionnaire renvoie un entier, comme avec la méthode count , utilisez un type de retour de Variant ou String.

Pour plus de détails sur le type de retour de certaines méthodes DataFrame, reportez-vous à Exécution d’une action pour évaluer un DataFrame.

Pour mettre à jour les paramètres de la feuille de calcul afin de renvoyer des résultats d’un type différent, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Ouvrez la feuille de calcul Python pour laquelle vous souhaitez afficher les résultats sous forme de tableau.

  4. Sélectionnez un entrepôt à utiliser pour exécuter la feuille de calcul. Si vous avez un entrepôt par défaut pour votre utilisateur, il est présélectionné. Assurez-vous que votre entrepôt fonctionne.

  5. Sélectionnez Settings et pour le Return type, sélectionnez le type renvoyé par la fonction de gestionnaire.

  6. Exécutez votre feuille de calcul Python.

  7. Examinez les résultats dans le panneau Results.

Passage d’arguments supplémentaires à la fonction de gestionnaire

Avec une feuille de calcul Python, vous pouvez tester une fonction Python qui prend un seul argument (un objet Snowpark Session) en désignant cette fonction comme gestionnaire de la feuille de calcul. Chaque fonction définie dans une feuille de calcul Python doit transmettre l’argument session: snowpark.Session.

Pour tester une fonction qui transmet des arguments supplémentaires, procédez comme suit :

  1. Ajoutez les arguments à votre fonction.

  2. Définissez une fonction séparée, à un seul argument, qui se transmet dans une Session Snowpark. Dans cette fonction, appelez la fonction à plusieurs arguments, en transmettant des valeurs pour les arguments supplémentaires, puis renvoyez la valeur de la fonction.

    Par exemple, pour écrire du code Python Snowpark qui filtre une table de paquets par la colonne du langage du paquet, vous pouvez écrire le code suivant :

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    
    # Add parameters with optional type hints to the main handler function
    def main(session: snowpark.Session, language: str):
      # Your code goes here, inside the "main" handler.
      table_name = 'information_schema.packages'
      dataFrame = session.table(table_name).filter(col("language") == language)
    
      # Print a sample of the dataFrame to standard output
      dataFrame.show()
    
      # The return value appears in the Results tab
      return dataFrame
    
    # Add a second function to supply a value for the language parameter to validate that your main handler function runs.
    def test_language(session: snowpark.Session):
      return main(session, 'java')
    
    Copy

    Dans cet exemple, la fonction main est la fonction à plusieurs arguments et la fonction test_language est la fonction à un seul argument utilisée pour valider l’exécution de votre code avec les valeurs d’argument transmises.

  3. Définissez la fonction à un seul argument comme fonction de gestionnaire pour exécuter la feuille de calcul et vérifiez que votre code s’exécute avec les valeurs des arguments.

    Dans cet exemple, remplacez le gestionnaire par la fonction test_language, puis sélectionnez Run. Vous pouvez modifier le gestionnaire dans la feuille de calcul Settings, ou sélectionner l’ampoule Show actions à côté de la fonction de gestionnaire et sélectionner Set function « test_language » as handler.

Lorsque vous déployez votre feuille de calcul Python en tant que procédure stockée, vous pouvez choisir la fonction de gestionnaire principale et examiner les arguments et les types mappés pour votre procédure stockée.

Exécution de feuilles de calcul Python

Après avoir écrit votre feuille de calcul Python, sélectionnez Run pour exécuter votre feuille de calcul Python. L’exécution de votre feuille de calcul exécute tout le code de votre feuille de calcul Python. L’exécution partielle ou incrémentielle du code n’est pas prise en charge.

Note

Si vous utilisez un paquet listé dans le canal Snowflake Anaconda et que vous n’avez pas encore accepté les termes et conditions d’Anaconda, vous pouvez voir une erreur à propos de paquets manquants. Voir Utilisation de paquets tiers à partir d’Anaconda.

Examiner la sortie générée par votre code

Vous pouvez consulter les messages de sortie standard (stdout) ou d’erreur standard (stderr) pour votre code Python dans le panneau Output d’une feuille de calcul Python.

Vous pouvez voir le résultat des types de fonctions suivants dans le panneau Output :

  • Fonctions qui écrivent dans la console, telles que print().

  • Fonctions qui affichent un DataFrame, telles que la méthode show de la classe DataFrame dans Snowpark Python.

Note

La sortie apparaît après la fin de l’exécution de tous les processus Python, plutôt que d’apparaître dans un flux pendant l’exécution du code.

La sortie du journal est écrite dans une zone de préparation temporaire et n’est capturée que si les conditions suivantes sont remplies :

  • Vous sélectionnez une base de données et un schéma pour la feuille de calcul.

  • La base de données sélectionnée n’a pas été créée à partir d’un partage.

  • Vous exécutez la feuille de calcul à l’aide d’un rôle disposant des privilèges USAGE sur la base de données et le schéma sélectionnés.

Examiner l’historique des requêtes pour une feuille de calcul Python

Lorsqu’une feuille de calcul Python s’exécute dans Snowsight, une procédure stockée anonyme exécute le code et génère des requêtes qui exécutent les commandes Snowpark dans le code.

Vous pouvez utiliser la page Query History dans Snowsight pour examiner les requêtes exécutées. Voir Examiner l’historique des requêtes à l’aide de Snowsight.

Par exemple, après avoir exécuté une feuille de calcul, vous pouvez passer en revue les requêtes exécutées en procédant comme suit :

  1. Passez en revue les Results de la feuille de calcul.

  2. Dans les Query Details de la feuille de calcul, sélectionnez More options » Copy Query ID

  3. Sélectionnez Worksheets pour revenir à la liste des feuilles de calcul.

  4. Sélectionnez Activity » Query History.

  5. Sur la page Query History , affichez uniquement les requêtes de votre feuille de calcul Python :

    1. Sélectionnez Filters, et activez l’option Query ID.

    2. Entrez l’ID de requête de votre feuille de calcul Python.

    3. Sélectionnez Apply Filters.

  6. Passez en revue les requêtes exécutées pour la feuille de calcul.

Exemple de code pour les feuilles de calcul Python

Lorsque vous écrivez des feuilles de calcul Python, vous pouvez effectuer des tâches de transformation et de manipulation de données, y compris lire des données à partir d’une zone de préparation nommée.

Vous pouvez consulter d’autres exemples dans Utilisation de DataFrames dans Snowpark Python.

Exemple : Écrire un programme Snowpark simple

Dans cet exemple, écrivez un programme Python Snowpark qui génère une petite plage de nombres et écrit cette plage dans une table que votre code crée, ou écrase si elle existe déjà, dans Snowflake. Pour exécuter cet exemple de code, vous devez disposer du privilège CREATE TABLE sur le schéma de base de données auquel vous souhaitez ajouter la table.

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Sélectionnez + » Python Worksheet.

  4. Sélectionnez la base de données et le schéma auxquels vous souhaitez ajouter la table.

  5. Sélectionnez un entrepôt à utiliser pour exécuter la feuille de calcul. Si vous avez un entrepôt par défaut pour votre utilisateur, il est présélectionné. Assurez-vous que votre entrepôt fonctionne.

  6. Écrivez le code Python de Snowpark dans le cadre de la fonction main :

    import snowflake.snowpark as snowpark
    
    def main(session: snowpark.Session):
      tableName = "range_table"
      df_range = session.range(1, 10, 2).to_df('a')
      df_range.write.mode("overwrite").save_as_table(tableName)
      return tableName + " table successfully created"
    
    Copy
  7. Sélectionnez Settings et pour le Return type, sélectionnez String pour le type renvoyé par la fonction de gestionnaire.

  8. Exécutez le code.

Exemple : Transformer des données dans une feuille de calcul Python

Dans cet exemple, écrivez un code Python qui agrège les entrées de la vue TASK_HISTORY du schéma ACCOUNT_USAGE de la base de données SNOWFLAKE en fonction de l’heure et de l’état programmés et qui enregistre la sortie agrégée dans une table, aggregate_task_history.

Note

Comme cet exemple interroge les données d’utilisation des comptes, vous devez utiliser un rôle avec :

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Sélectionnez + » Python Worksheet.

  4. Sélectionnez la base de données et le schéma auxquels vous souhaitez ajouter la table.

  5. Sélectionnez un entrepôt à utiliser pour exécuter la feuille de calcul. Si vous avez un entrepôt par défaut pour votre utilisateur, il est présélectionné. Assurez-vous que votre entrepôt fonctionne.

  6. Écrivez le code Python de Snowpark dans le cadre de la fonction main :

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    from snowflake.snowpark.dataframe_reader import *
    from snowflake.snowpark.functions import *
    
    def main(session: snowpark.Session):
    
      inputTableName = "snowflake.account_usage.task_history"
      outputTableName = "aggregate_task_history"
    
      df = session.table(inputTableName)
      df.filter(col("STATE") != "SKIPPED")\
        .group_by(("SCHEDULED_TIME"), "STATE").count()\
        .write.mode("overwrite").save_as_table(outputTableName)
      return outputTableName + " table successfully written"
    
    Copy
  7. Sélectionnez Settings et pour le Return type, sélectionnez String pour le type renvoyé par la fonction de gestionnaire.

  8. Exécutez le code.

Après avoir exécuté votre code dans une feuille de calcul Python, vous pouvez ouvrir une feuille de calcul SQL et interroger la table. Voir Interrogation de données à l’aide de feuilles de calcul.

Exemple : Lire des fichiers à partir d’une zone de préparation avec des feuilles de calcul Python

Snowpark Python vous permet de lire des fichiers à partir d’une zone de préparation et d’en écrire le contenu dans une table ou de les enregistrer en tant que vue dans Snowflake. Dans cet exemple, le code Python lit le contenu d’un fichier compressé au format CSV contenant les données des employés, data_0_0_0.csv.gz de la zone de préparation nommée db1.public.files et écrit le contenu dans une table appelée employees.

Note

Pour exécuter cet exemple de code, vous devez utiliser un rôle qui a :

  • Le privilège USAGE sur la zone de préparation, la base de données et le schéma utilisés dans le code.

  • Le privilège CREATE TABLE sur le schéma de base de données auquel vous souhaitez ajouter la table.

  1. Connectez-vous à Snowsight.

  2. Ouvrez Worksheets.

  3. Sélectionnez + » Python Worksheet.

  4. Sélectionnez la base de données et le schéma auxquels vous souhaitez ajouter la table.

  5. Sélectionnez un entrepôt à utiliser pour exécuter la feuille de calcul. Si vous avez un entrepôt par défaut pour votre utilisateur, il est présélectionné. Assurez-vous que votre entrepôt fonctionne.

  6. Écrivez le code Python de Snowpark dans le cadre de la fonction main :

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.types import *
    
    schema_for_file = StructType([
      StructField("name", StringType()),
      StructField("role", StringType())
    ])
    
    fileLocation = "@DB1.PUBLIC.FILES/data_0_0_0.csv.gz"
    outputTableName = "employees"
    
    def main(session: snowpark.Session):
      df_reader = session.read.schema(schema_for_file)
      df = df_reader.csv(fileLocation)
      df.write.mode("overwrite").save_as_table(outputTableName)
    
      return outputTableName + " table successfully written from stage"
    
    Copy
  7. Sélectionnez Settings et pour le Return type, sélectionnez String pour le type renvoyé par la fonction de gestionnaire.

  8. Exécutez le code.

Après avoir exécuté votre code dans une feuille de calcul Python, vous pouvez ouvrir une feuille de calcul SQL et interroger la table. Voir Interrogation de données à l’aide de feuilles de calcul.

Pour plus de détails sur l’utilisation des fichiers dans une zone de préparation en utilisant Snowpark, voir Utilisation de DataFrames dans Snowpark Python.