Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

SVL_UDF_LOG

记录 在执行用户定义的函数 (UDF) 期间生成的系统定义的错误和警告消息。

此视图 对所有用户可见。超级用户可以查看所有行;普通用户只能看到自己的数据。有关更多信息,请参阅 系统表及视图中数据的可见性

表列

列名称 数据类型 描述
query bigint 查询 ID。您可以使用此 ID 联接各种其他系统表和视图。
message char(4096) 由函数生成的消息。
created timestamp 日志的创建时间。
traceback char(4096) 此值提供 UDF 的堆栈回溯(如果可用)。有关更多信息,请参阅 Python 标准库中的回溯
funcname character(256) 正在执行的 UDF 的名称。
node integer 生成消息的节点。
slice integer 生成消息的切片。
seq integer 消息在切片上的顺序。

查询示例

以下示例说明 UDF 如何处理系统定义的错误。第一个块显示了返回参数的逆参数的 UDF 函数的定义。在运行函数并提供参数 0 时,如第二个块所示,函数将返回错误。第三个语句将读取在 SVL_UDF_LOG 中记录的错误消息

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

以下示例将日志记录和警告消息添加到 UDF 中,以便被零除运算生成警告消息而不是停止并显示错误消息。

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

以下示例运行该函数,然后查询 SVL_UDF_LOG 以查看消息。

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

本页内容: