SYS_UDF_LOG - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

SYS_UDF_LOG

Merekam pesan kesalahan dan peringatan yang ditentukan sistem yang dihasilkan selama eksekusi function () yang ditentukan pengguna. UDF

SYS_ UDF _ LOG hanya terlihat oleh pengguna super. Untuk informasi selengkapnya, lihat Visibilitas data dalam tabel dan tampilan sistem.

Kolom tabel

Nama kolom Jenis data Deskripsi
query_id bigint Pengidentifikasi kueri.
function_name text Nama fungsi yang ditentukan pengguna.
record_time timestamp Waktu rekaman itu dibuat.
urutan integer Urutan pesan log tunggal.
pesan text Teks pesan log.

Kueri Sampel

Contoh berikut menunjukkan bagaimana UDFs menangani kesalahan yang ditentukan sistem. Blok pertama menunjukkan definisi untuk UDF fungsi yang mengembalikan kebalikan dari argumen. Ketika Anda menjalankan fungsi dan memberikan 0 sebagai argumen Anda, fungsi mengembalikan kesalahan. Pernyataan terakhir mengembalikan pesan kesalahan yang masuk 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

Contoh berikut menambahkan logging dan pesan peringatan ke UDF sehingga operasi pembagian dengan nol menghasilkan pesan peringatan alih-alih berhenti dengan pesan kesalahan.

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