本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在具體化視觀表中使用使用者定義的函數 (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;
或者,您可以建立參考 SQL 的具體化檢視UDF。
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;
或者,您可以重新整理參考 SQL 的具體化檢視UDF。
REFRESH MATERIALIZED VIEW mv_sql_udf;
查詢具體化視觀表的資料。
SELECT * FROM mv_python_udf ORDER BY a;
查詢結果如下:
a ----- false false true
這會針對最後一組值傳回
true
,因為資料欄a
(4) 的值大於資料欄b
(2) 的值。-
或者,您可以查詢參考 SQL 的具體化檢視UDF。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;