Enregistrement de messages à partir de fonctions et de procédures¶
Vous pouvez enregistrer des messages (tels que des messages d’avertissement ou d’erreur) à partir d’une procédure stockée, une UDF, ou une UDTF, y compris ceux que vous écrivez en utilisant des APIs Snowpark. Vous pouvez accéder aux messages enregistrés à partir d’une table d’événements (un type de table prédéfinie qui capture les événements, y compris les messages enregistrés). Pour une liste des langages de gestionnaire pris en charge, voir Langues acceptées.
Par exemple, dans une UDF Java, vous pouvez utiliser l” API SLF4J pour enregistrer les messages. Plus tard, vous pourrez accéder à ces messages enregistrés dans une table d’événements.
Note
Avant de commencer à enregistrer des messages, vous devez configurer une table d’événements. Pour plus d’informations, reportez-vous à Configuration d’une table d’événement.
Exemple d’enregistrement¶
Le code Python de l’exemple suivant importe le module logging
, crée un enregistreur et enregistre un message au niveau INFO
.
Note
Un message enregistré à partir d’une méthode qui traite une ligne d’entrée sera enregistré pour chaque ligne traitée par l’UDF. Si l’UDF est exécutée dans une grande table, il peut en résulter un grand nombre de messages dans la table des événements.
import logging
logger = logging.getLogger("mylog")
def test_logging(self):
logger.info("This is an INFO test.")
Prise en main¶
Pour commencer à enregistrer des données à partir du code du gestionnaire, suivez ces étapes de haut niveau :
Mettre en place une table d’événements.
Snowflake utilisera votre table d’événements pour stocker les messages enregistrés à partir de votre code de gestionnaire. Une table d’événements comporte des colonnes prédéfinies par Snowflake.
Familiarisez-vous avec l’API de journalisation pour le langage du gestionnaire que vous allez utiliser.
Reportez-vous à Langues acceptées pour obtenir la liste des langages de gestionnaire, puis consultez le contenu sur la façon de se connecter à partir de votre langage.
Ajoutez le code de journalisation à votre gestionnaire.
Apprenez à récupérer les données de journalisation de la table des événements.
Niveau des messages du journal¶
Vous pouvez gérer le niveau des données du journal stockées dans la table des événements en définissant le niveau du journal. Avant de procéder à la journalisation, utilisez ce paramètre pour vous assurer que vous capturez bien la gravité du message.
Pour plus d’informations, reportez-vous à Réglage du niveau de journalisation.
Langues acceptées¶
Vous pouvez enregistrer des messages provenant du code du gestionnaire de fonction et de procédure écrit dans les langages suivants :
Langage / Type |
Java |
JavaScript |
Python |
Scala |
SQL |
---|---|---|---|---|---|
Procédures stockées |
✔ |
✔ |
✔ |
✔ |
✔ ** |
UDFs scalaires |
✔ |
✔ |
✔ |
✔ |
|
UDTFs |
✔ |
✔ |
✔ |
✔ * |
Légende
- *
Cela comprend des APIs Snowpark utilisées pour créer des UDTFs.
- **
L’Exécution de scripts Snowflake utilisée pour écrire des procédures stockées.
Note
La journalisation n’est pas prise en charge dans les cas suivants :
Prise en charge du langage du code du gestionnaire¶
Pour enregistrer les messages, vous pouvez utiliser des fonctions communes au langage de code de votre gestionnaire. Snowflake intercepte les messages et les stocke dans la table d’événements que vous avez créée.
Par exemple, dans une UDF Java, vous pouvez utiliser l” API SLF4J pour enregistrer les messages. Plus tard, vous pourrez accéder à ces messages enregistrés dans une table d’événements.
Si vous prévoyez d’enregistrer des messages en cas d’erreur, vous devez le faire à partir de la structure de gestion des erreurs du langage que vous utilisez. Par exemple, dans une UDF Java, appelez la méthode d’enregistrement d’un message dans le bloc catch
où vous traitez l’exception.
Le tableau suivant répertorie les langages de gestionnaire pris en charge pour la journalisation, ainsi que des liens vers des informations sur la journalisation à partir du code.
Langage |
Bibliothèque d’enregistrement |
Documentation |
---|---|---|
Java |
SLF4J API |
|
JavaScript |
Objet API JavaScript |
|
Python |
Module de la bibliothèque standard |
|
Scala |
SLF4J API |
|
Exécution de scripts Snowflake |
Fonction SYSTEM$LOG Snowflake. |
Enregistrement des messages dans l’Exécution de scripts Snowflake |
Accès aux messages du journal¶
Vous pouvez accéder aux messages du journal stockés dans votre table d’événements en exécutant une commande SELECT sur la table d’événements. Pour plus d’informations, reportez-vous à Accès aux données des messages enregistrés.
Coûts de la journalisation¶
Lorsque vous enregistrez des messages à partir d’une fonction ou d’une procédure, Snowflake collecte les messages par lots et les intègre dans la table d’événements.
Pour effectuer ce travail, Snowflake utilise des ressources gérées par Snowflake, également appelées modèle de calcul sans serveur. Comme c’est le cas avec d’autres fonctionnalités sans serveur, Snowflake facture votre compte pour l’utilisation des ressources de calcul et des services Cloud nécessaires à l’ingestion des messages enregistrés. Les crédits Snowflake sont facturés par heure de calcul :
Ressources de calcul gérées par Snowflake : 1,25
Services Cloud : 1
Ces coûts apparaissent sur votre facture sous forme de postes distincts.
Pour déterminer l’utilisation du crédit pour l’enregistrement dans le temps, utilisez Vue EVENT_USAGE_HISTORY.
Pour réduire le coût de journalisation :
Évitez de vous connecter fréquemment sur une longue période.
Définir le niveau des messages ingérés sur des objets spécifiques. Par exemple, vous pouvez définir le niveau de journalisation pour des fonctions ou des procédures spécifiques dans une session, plutôt que de définir le niveau de journalisation pour toutes les fonctions ou procédures.