本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在具體化視觀表中使用使用者定義函數 (UDF)
您可以在 Amazon Redshift 具體化視圖UDF中使用純量。在 python 中定義這些內容SQL,或者在具體化視圖定義中引用它們。
在具體化視觀表UDF中參照
下列程序顯示如何在具體化檢視定義中使用執行簡單算術比較的功UDFs能。
建立要在具體化視觀表定義中使用的資料表。
CREATE TABLE base_table (a int, b int);
在 python 中建立一個純量使用者定義函數,該函數會傳回布林值,指出整數是否大於比較整數。
CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE AS $$ return x1 > x2 $$ LANGUAGE plpythonu;
或者,建立UDF與功能類似SQL,您可以使用它來比較結果與第一個。
CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE AS $$ select $1 > $2; $$ LANGUAGE SQL;
建立從您建立的表格中選取並參照的具體化視觀表UDF。
CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;
您可以選擇性地建立參照 SQLUDF.
CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
新增資料至資料表,然後重新整理具體化視觀表。
INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
REFRESH MATERIALIZED VIEW mv_python_udf;
您可以選擇性地重新整理參考的具體化視觀表SQLUDF。
REFRESH MATERIALIZED VIEW mv_sql_udf;
查詢具體化視觀表的資料。
SELECT * FROM mv_python_udf ORDER BY a;
查詢結果如下:
a ----- false false true
這會針對最後一組值傳回
true
,因為資料欄a
(4) 的值大於資料欄b
(2) 的值。-
您可以選擇性地查詢參考的具體化視觀表SQLUDF。該SQL函數的結果與 Python 版本的結果相匹配。
SELECT * FROM mv_sql_udf ORDER BY a;
查詢結果如下:
a ----- false false true
這將針對最後一組值傳回
true
以進行比較。 使用的DROP敘述句可刪除CASCADE使用者定義函數以及參照它的具體化視觀表。
DROP FUNCTION udf_python_bool(int, int) CASCADE;
DROP FUNCTION udf_sql_bool(int, int) CASCADE;