Registro de errores y advertencias en las UDF de Python
Puede usar el módulo de registro de Python para crear mensajes de error y advertencia definidos por el usuario en sus User-Defined Scalar Function (UDF, Función escalar definida por el usuario). Después de la ejecución de una consulta, puede consultar la vista de sistema SVL_UDF_LOG para recuperar mensajes registrados.
nota
El registro de UDF consume recursos del clúster y podría afectar el rendimiento del sistema. Le recomendamos que implemente el registro solo con fines de desarrollo y resolución de problemas.
Durante la ejecución de consultas, el gestor de registros escribe mensajes a la vista de sistema SVL_UDF_LOG, junto con la función, nombre, nodo y sector correspondientes. El gestor de registros escribe una fila en SVL_UDF_LOG por mensaje, por sector. Los mensajes se truncan en 4 096 bytes. El registro de UDF se limita a 500 filas por sector. Cuando el registro se llena, el gestor descarta los mensajes más viejos y agrega un mensaje de advertencia a SVL_UDF_LOG.
nota
El gestor de registros de las UDF de Amazon Redshift introduce los escapes de las líneas nuevas (\n
), las barras verticales (|
) y las barras inversas (\
) con una barra inversa (\
).
De manera predeterminada, el nivel registro de la UDF se establece en WARNING. Los mensajes con un nivel registro WARNING, ERROR y CRITICAL se registran. Los mensajes de menor gravedad, INFO, DEBUG y NOTSET, se ignoran. Para establecer el nivel registro de la UDF, use el método de registro en Python. Por ejemplo, lo siguiente establece el nivel registro en INFO.
logger.setLevel(logging.INFO)
Para obtener más información acerca del uso del módulo de registro en Python, consulte Logging facility for Python
En el siguiente ejemplo, se crea una función denominada f_pyerror que importa el módulo de registro en Python, crea una instancia de registro y registra un error.
CREATE OR REPLACE FUNCTION f_pyerror()
RETURNS INTEGER
VOLATILE AS
$$
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info('Your info message here')
return 0
$$ language plpythonu;
En el siguiente ejemplo, se consulta el SVL_UDF_LOG para ver el mensaje registrado en el ejemplo anterior.
select funcname, node, slice, trim(message) as message
from svl_udf_log;
funcname | query | node | slice | message
------------+-------+------+-------+------------------
f_pyerror | 12345 | 1| 1 | Your info message here