SYS_UDF_LOG - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

SYS_UDF_LOG

Enregistre les messages d'erreur et d'avertissement définis par le système générés lors de l'exécution de la fonction définie par l'utilisateur ()UDF.

SYS_ UDF _ n'LOGest visible que par les superutilisateurs. Pour de plus amples informations, veuillez consulter Visibilité des données dans les tables et vues système.

Colonnes de la table

Nom de la colonne Type de données Description
query_id bigint Identificateur de requête.
function_name text Nom de la fonction définie par l’utilisateur.
record_time timestamp Heure à laquelle l’enregistrement a été créé.
sequence entier Séquence d’un seul message de journal.
message text Texte du message du journal.

Exemples de requêtes

L'exemple suivant montre comment UDFs gérer les erreurs définies par le système. Le premier bloc montre la définition d'une UDF fonction qui renvoie l'inverse d'un argument. Lorsque vous exécutez la fonction et fournissez 0 comme argument, la fonction renvoie une erreur. La dernière instruction renvoie le message d'erreur connecté à SYS _ UDF _LOG.

-- Create a function to find the inverse of a number. CREATE OR REPLACE FUNCTION f_udf_inv(a int) RETURNS float IMMUTABLE AS $$return 1/a $$ LANGUAGE plpythonu; -- Run the function with 0 to create an error. Select f_udf_inv(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log; query_id | record_time | message ----------+----------------------------+------------------------------------------------------- 2211 | 2023-08-23 15:53:11.360538 | ZeroDivisionError: integer division or modulo by zero line 2, in f_udf_inv\n return 1/a\n

L'exemple suivant ajoute une journalisation et un message d'avertissement au fichier UDF afin qu'une opération de division par zéro génère un message d'avertissement au lieu de s'arrêter avec un message d'erreur.

-- Create a function to find the inverse of a number and log a warning if you input 0. CREATE OR REPLACE FUNCTION f_udf_inv_log(a int) RETURNS float IMMUTABLE AS $$ import logging logger = logging.getLogger() #get root logger if a==0: logger.warning('You attempted to divide by zero.\nReturning zero instead of error.\n') return 0 else: return 1/a $$ LANGUAGE plpythonu; -- Run the function with 0 to trigger the warning. Select f_udf_inv_log(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log; query_id | record_time | message ----------+----------------------------+------------------------------------------------------------------------------- 0 | 2023-08-23 16:10:48.833503 | WARNING: You attempted to divide by zero.\nReturning zero instead of error.\n