在具體化視觀表中使用使用者定義的函數 (UDF) - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在具體化視觀表中使用使用者定義的函數 (UDF)

您可以在 Amazon Redshift 具體化檢視UDF中使用純量。在 python 中定義這些項目,或在具體化檢視定義中SQL參考它們。

在具體化視觀表UDF中參考

下列程序顯示在具體化視觀定義中如何使用 UDFs 來執行簡單的算術比較。

  1. 建立要在具體化視觀表定義中使用的資料表。

    CREATE TABLE base_table (a int, b int);
  2. 在 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;
  3. 建立具體化檢視,從您建立的資料表中選取 並參考 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;
  4. 新增資料至資料表,然後重新整理具體化視觀表。

    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;
  5. 查詢具體化視觀表的資料。

    SELECT * FROM mv_python_udf ORDER BY a;

    查詢結果如下:

    a ----- false false true

    這會針對最後一組值傳回 true,因為資料欄 a (4) 的值大於資料欄 b (2) 的值。

  6. 或者,您可以查詢參考 SQL 的具體化檢視UDF。SQL 函數的結果與 Python 版本的結果相符。

    SELECT * FROM mv_sql_udf ORDER BY a;

    查詢結果如下:

    a ----- false false true

    這將針對最後一組值傳回 true 以進行比較。

  7. 使用 DROP陳述式CASCADE來捨棄使用者定義的函數和參考該函數的具體化檢視。

    DROP FUNCTION udf_python_bool(int, int) CASCADE;
    DROP FUNCTION udf_sql_bool(int, int) CASCADE;