SVL_UDF_LOG - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SVL_UDF_LOG

記錄使用者定義函數 (UDF) 執行期間產生的系統定義的錯誤和警告訊息。

所有使用者都可看見 SVL_UDF_LOG。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱 系統資料表和檢視中資料的可見性

此資料表中的部份或所有資料也會在 SYS 監控檢視 SYS_UDF_LOG 中找到。SYS 監視檢視中的資料會格式化為更易於使用和理解。我們建議您使用 SYS 監控檢視進行查詢。

資料表欄

欄名稱 資料類型 描述
query bigint 查詢 ID。您可以使用此 ID 來聯結各種其他系統資料表與檢視。
message char(4096) 函數產生的訊息。
已建立 timestamp 日誌建立的時間。
回溯 char(4096) 若果可用,此值會提供 UDF 的堆疊回溯。如需詳細資訊,請參閱 Python Standard Library 的 traceback
funcname character(256) 正在執行之 UDF 的名稱。
節點 integer 訊息產生的節點。
分割 integer 訊息產生的分割。
seq integer 分割上訊息的順序。

範例查詢

以下範例說明 UDF 如何處理系統定義的錯誤。第一個區塊顯示傳回引數反向之 UDF 函數的定義。執行函數並提供 0 引數時,如第二個區塊所示,函數會傳回錯誤。第三個陳述式會讀取在 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

下列範例會將記錄且警告訊息新增至 UDF,以至於除以零操作會導致警告訊息,而不是停止並出現錯誤訊息。

-- 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,來檢視訊息。

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