Écrire le gestionnaire Python d’une procédure stockée

Vous pouvez écrire du code Python en tant que gestionnaire qui s’exécute lorsqu’une procédure stockée est appelée. Cette section décrit la conception d’un gestionnaire.

Vous pouvez créer une procédure stockée à partir du code du gestionnaire de plusieurs manières :

Planification de l’écriture de votre procédure stockée

Les procédures stockées s’exécutent dans Snowflake, et vous devez donc planifier le code que vous écrivez en gardant cela à l’esprit.

  • Limitez la quantité de mémoire consommée. Snowflake impose des limites à une méthode ou une fonction en matière de quantité de mémoire nécessaire. Pour obtenir des conseils, reportez-vous à Concevoir des gestionnaires qui respectent les contraintes imposées par Snowflake.

  • Veillez à ce que la méthode ou la fonction de votre gestionnaire respecte le niveau de « thread safety ».

  • Suivez les règles et les restrictions de sécurité. Reportez-vous à Pratiques de sécurité pour UDFs et procédures.

  • Déterminez si vous souhaitez que la procédure stockée s’exécute avec les droits de l’appelant ou les droits du propriétaire.

  • Envisagez la version snowflake-snowpark-python utilisée pour exécuter les procédures stockées. En raison de limitations dans le processus de version des procédures stockées, la bibliothèque snowflake-snowpark-python disponible dans l’environnement Python des procédures stockées est généralement en retard d’une version par rapport à la version publique. Utilisez le code SQL suivant pour connaître la dernière version disponible :

    SELECT * FROM information_schema.packages WHERE package_name = 'snowflake-snowpark-python' ORDER BY version DESC;
    
    Copy

Écriture de la méthode ou de la fonction

Lorsque vous écrivez la méthode ou la fonction pour la procédure stockée, notez ce qui suit :

  • Spécifiez l’objet Snowpark Session comme premier argument de votre méthode ou fonction. Lorsque vous appelez votre procédure stockée, Snowflake crée automatiquement un objet Session et le transmet à votre procédure stockée. (Vous ne pouvez pas créer l’objet Session vous-même).

  • Pour le reste des arguments et pour la valeur de retour, utilisez les types Python qui correspondent aux types de données Snowflake. Snowflake prend en charge les types de données Python énumérés dans Mappages de type de données SQL-Python pour les paramètres et les types de retour

  • Lorsque vous exécutez un job enfant asynchrone à partir du gestionnaire d’une procédure - par exemple en utilisant DataFrame. collect_nowait — la fonction « fire and forget » n’est pas prise en charge.

    En d’autres termes, si le gestionnaire (handler) émet une requête enfant qui est toujours en cours d’exécution lorsque la tâche de la procédure parent se termine, la tâche enfant est automatiquement annulée.

Gestion des erreurs

Vous pouvez utiliser les techniques normales de gestion des exceptions de Python pour détecter les erreurs au sein de la procédure.

Si une exception non détectée se produit à l’intérieur de la méthode, Snowflake génère une erreur qui inclut la trace de la pile pour l’exception. Lorsque l’enregistrement des exceptions non gérées est activé, Snowflake enregistre les données relatives aux exceptions non gérées dans une table d’événements.

Mettre les dépendances à la disposition de votre code

Si le code de votre gestionnaire dépend d’un code défini en dehors du gestionnaire lui-même (tel que le code défini dans un module) ou de fichiers de ressources, vous pouvez mettre ces dépendances à la disposition de votre code en les téléchargeant dans une zone de préparation. Reportez-vous à Mettre les dépendances à la disposition de votre code, ou pour les feuilles de calcul Python, reportez-vous à Ajouter un fichier Python d’une zone de préparation à une feuille de calcul.

Si vous créez votre procédure stockée à l’aide de SQL, utilisez la clause IMPORTS lors de l’écriture de l’instruction CREATE PROCEDURE, pour pointer vers les fichiers de dépendance.