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

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

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

您可以在 Amazon Redshift 具體化視觀表中使用純量 UDF。在 python 或 SQL 中定義這些內容,並在具體化視觀表定義中加以參照。

在具體化視觀表中參照 UDF

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

  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;

    或者,使用 SQL 建立功能類似的 UDF,您可以使用此功能與第一個結果做比較。

    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. 搭配 CASCADE 使用 DROP 陳述式,以捨棄使用者定義函數及參照該函數的具體化視觀表。

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