SVL_UDF_LOG - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

SVL_UDF_LOG

Registra la generazione di messaggi di errore e di avviso definita dal sistema durante l'esecuzione della funzione definita dall'utente (UDF).

SVL_UDF_LOG è visibile a tutti gli utenti. Gli utenti con privilegi avanzati visualizzano tutte le righe; gli utenti regolari visualizzano solo i propri dati. Per ulteriori informazioni, consulta Visibilità dei dati nelle tabelle e nelle viste di sistema.

Alcuni o tutti i dati di questa tabella sono definiti anche nella vista di monitoraggio SYS SYS_UDF_LOG. I dati nella vista di monitoraggio SYS sono formattati in modo da essere più facili da usare e comprendere. Ti consigliamo di utilizzare la vista di monitoraggio SYS per le query.

Colonne di tabella

Nome colonna Tipo di dati Descrizione
query bigint L'ID di query. È possibile utilizzare questo ID per unire varie altre tabelle e visualizzazioni di sistema.
message char(4096) Il messaggio generato dalla funzione.
creato timestamp L'orario in cui è stato creato il log.
traceback char(4096) Se disponibile, questo valore fornisce un'analisi dello stack per l'UDF. Per ulteriori informazioni, consultare analisi in Python Standard Library.
funcname character(256) Il nome dell'UDF in esecuzione.
nodo integer Il nodo in cui il messaggio è stato generato.
sezione integer La sezione in cui il messaggio è stato generato.
seq integer La sequenza del messaggio sulla sezione.

Query di esempio

L'esempio seguente mostra come le UDF gestiscono gli errori definiti dal sistema. Il primo blocco mostra la definizione di una funzione UDF che restituisce l'inverso di un argomento. Quando si esegue la funzione e si fornisce un argomento 0, come mostra il secondo blocco, la funzione restituisce un errore. La terza istruzione legge il messaggio di errore registrato in 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

L'esempio seguente aggiunge la registrazione e un messaggio di avviso all'UDF in modo che un'operazione di divisione per zero risulti in un messaggio di avviso anziché in un arresto con un messaggio di errore.

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

L'esempio seguente esegue la funzione, poi fa una query a SVL_UDF_LOG per visualizzare il messaggio.

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