

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 在具體化視觀表中使用使用者定義函數 (UDF)
<a name="materialized-view-UDFs"></a>

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

## 在具體化視觀表中參照 UDF
<a name="materialized-view-UDFs-examples"></a>

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

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

   ```
   CREATE TABLE base_table (a int, b int);
   ```

1. 在 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;
   ```

1. 建立可從所建立資料表中選取並參照 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;
   ```

1. 新增資料至資料表，然後重新整理具體化視觀表。

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

1. 查詢具體化視觀表的資料。

   ```
   SELECT * FROM mv_python_udf ORDER BY a;
   ```

   查詢結果如下：

   ```
   a
   -----
   false
   false
   true
   ```

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

1. 您也可以選擇性地查詢參照 SQL UDF 的具體化視觀表。SQL 函數的結果會與 Python 版本的結果相符。

   ```
   SELECT * FROM mv_sql_udf ORDER BY a;
   ```

   查詢結果如下：

   ```
   a
   -----
   false
   false
   true
   ```

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

1. 搭配 CASCADE 使用 DROP 陳述式，以捨棄使用者定義函數及參照該函數的具體化視觀表。

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

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