

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 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
   ```

   열 `a`(4)의 값이 열 `b`(2)의 값보다 크기 때문에 마지막 값 집합에 대해 `true`가 반환됩니다.

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