SVL_UDF_LOG - Amazon Redshift

SVL_UDF_LOG

Registra los mensajes de error y advertencia definidos por el sistema que se generan durante la ejecución de la función definida por el usuario (UDF).

SVL_UDF_LOG es visible para todos los usuarios. Los superusuarios pueden ver todas las filas; los usuarios normales solo pueden ver sus datos. Para obtener más información, consulte Visibilidad de datos en las tablas y vistas de sistema.

Algunos o todos los datos de esta tabla también están en la vista de monitoreo SYS SYS_UDF_LOG. Los datos de la vista de monitoreo SYS están formateados para que sean más fáciles de usar y entender. Se recomienda utilizar la vista de monitoreo SYS para las consultas.

Columnas de la tabla

Nombre de la columna Tipo de datos Descripción
consulta bigint El ID de la consulta. Puede usar este ID para combinar distintas vistas y tablas del sistema.
message char (4096) El mensaje generado por la función.
created Marca de tiempo La hora en que se creó el registro.
traceback char (4096) Si está disponible, este valor brinda una pista de stack para la UDF. Para obtener más información, visite traceback en la biblioteca estándar de Python.
funcname character (256) El nombre de la UDF en ejecución.
node integer El nodo donde se generó el mensaje.
slice integer El sector donde se generó el mensaje.
seq integer La secuencia del mensaje en el sector.

Consultas de ejemplo

En el siguiente ejemplo, se muestra cómo las UDF administran los errores definidos por el sistema. El primer bloque muestra la definición para una función UDF que devuelve la inversa de un argumento. Cuando ejecuta la función y proporciona un argumento 0, como se muestra en el segundo bloque, la función devuelve un error. La tercera instrucción lee el mensaje de error que se registra en SVL_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 a 0 argument to create an error Select f_udf_inv(0) from sales; -- Query SVL_UDF_LOG to view the message Select query, created, message::varchar from svl_udf_log; query | created | message -------+----------------------------+--------------------------------------------------------- 2211 | 2015-08-22 00:11:12.04819 | ZeroDivisionError: long division or modulo by zero\nNone

En el siguiente ejemplo, se agrega el registro y un mensaje de advertencia a la UDF para que una operación de división en cero dé como resultado un mensaje de advertencia, en lugar de parar con un mensaje de error.

-- Create a function to find the inverse of a number and log a warning 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;

En el siguiente ejemplo, se ejecuta la función y, luego se consulta SVL_UDF_LOG para ver el mensaje.

-- Run the function with a 0 argument to trigger the warning Select f_udf_inv_log(0) from sales; -- Query SVL_UDF_LOG to view the message Select query, created, message::varchar from svl_udf_log; query | created | message ------+----------------------------+---------------------------------- 0 | 2015-08-22 00:11:12.04819 | You attempted to divide by zero. Returning zero instead of error.