SYS_UDF_LOG - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il post del blog.

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

SYS_UDF_LOG

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

SYS_UDF_LOG è visibile solo agli utenti con privilegi avanzati. Per ulteriori informazioni, consulta Visibilità dei dati nelle tabelle e nelle viste di sistema.

Colonne di tabella

Nome della colonna Tipo di dati Description
query_id bigint L'identificativo della query.
function_name testo Il nome della funzione definita dall'utente.
record_time timestamp L'orario in cui è stato creato il record.
sequenza intero La sequenza di un singolo messaggio di log.
message testo Il testo del messaggio di log.

Query di esempio

L'esempio seguente mostra come UDFs gestire gli errori definiti dal sistema. Il primo blocco mostra la definizione di una funzione UDF che restituisce l'inverso di un argomento. Quando esegui la funzione e fornisci un argomento 0, la funzione restituisce un errore. L'ultima istruzione restituisce il messaggio di errore registrato in SYS_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 0 to create an error. Select f_udf_inv(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log; query_id | record_time | message ----------+----------------------------+------------------------------------------------------- 2211 | 2023-08-23 15:53:11.360538 | ZeroDivisionError: integer division or modulo by zero line 2, in f_udf_inv\n return 1/a\n

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 if you input 0. 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; -- Run the function with 0 to trigger the warning. Select f_udf_inv_log(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log; query_id | record_time | message ----------+----------------------------+------------------------------------------------------------------------------- 0 | 2023-08-23 16:10:48.833503 | WARNING: You attempted to divide by zero.\nReturning zero instead of error.\n