SYS_UDF_LOG - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

SYS_UDF_LOG

Zeichnet systemdefinierte Fehlermeldungen und Warnungen auf, die während der Ausführung einer benutzerdefinierten Funktion (User-Defined Function, UDF) generiert wurden.

SYS_UDF_LOG ist nur für Superuser sichtbar. Weitere Informationen finden Sie unter Sichtbarkeit der Daten in Systemtabellen und Ansichten.

Tabellenspalten

Spaltenname Datentyp Beschreibung
query_id bigint Die Abfrage-ID.
function_name text Der Name der benutzerdefinierten Funktion.
record_time Zeitstempel Der Zeitpunkt der Erstellung des Datensatzes.
sequence Ganzzahl Die Reihenfolge einer einzelnen Protokollnachricht.
Nachricht text Der Text der Protokollnachricht.

Beispielabfragen

Das folgende Beispiel zeigt, wie UDFs mit systemdefinierten Fehlern umgegangen wird. Der erste Block zeigt die Definition für eine benutzerdefinierte Funktion, die die Umkehrung eines Arguments ausgibt. Wenn Sie die Funktion ausführen und 0 als Argument angeben, gibt die Funktion einen Fehler aus. Die letzte Anweisung gibt die in SYS_UDF_LOG protokollierte Fehlermeldung zurück.

-- 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

Das folgende Beispiel fügt der benutzerdefinierten Funktion Protokollierung und eine Warnmeldung hinzu, so dass eine Division durch Null zu einer Warnmeldung und nicht zum Anhalten mit einer Fehlermeldung führt.

-- 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