

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Como usar uma função definida pelo usuário (UDF) em uma visão materializada
<a name="materialized-view-UDFs"></a>

Você pode usar uma UDF escalar em uma visão materializada do Amazon Redshift. Defina essas funções em Python ou SQL e faça referência a elas na definição da visão materializada.

## Como fazer referência a uma UDF em uma visão materializada
<a name="materialized-view-UDFs-examples"></a>

O procedimento a seguir mostra como usar UDFs que realizam comparações aritméticas simples em uma definição de visão materializada.

1. Crie uma tabela para usar na definição de visão materializada.

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

1. Crie uma função escalar definida pelo usuário em Python que retorne um valor booleano indicando se um inteiro é maior do que outro inteiro de comparação.

   ```
   CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE
   AS $$
     return x1 > x2
   $$ LANGUAGE plpythonu;
   ```

   Opcionalmente, crie uma UDF funcionalmente semelhante com SQL, que você pode usar para comparar os resultados com a primeira. 

   ```
   CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE
   AS $$
     select $1 > $2;
   $$ LANGUAGE SQL;
   ```

1. Crie uma visão materializada que faça uma seleção na tabela que você criou e faça referência à UDF. 

   ```
   CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;
   ```

   Opcionalmente, você pode criar uma visão materializada que faça referência à UDF em SQL.

   ```
   CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
   ```

1. Adicione dados à tabela e atualize a visão materializada.

   ```
   INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
   ```

   ```
   REFRESH MATERIALIZED VIEW mv_python_udf;
   ```

   Opcionalmente, você pode atualizar a visão materializada que faz referência à UDF em SQL.

   ```
   REFRESH MATERIALIZED VIEW mv_sql_udf;
   ```

1. Consulte dados da visão materializada.

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

   Os resultados da consulta são os seguintes:

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

   Isso retorna `true` para o último conjunto de valores porque o valor da coluna `a` (4) é maior que o valor da coluna `b` (2).

1. Opcionalmente, você pode consultar a visão materializada que faz referência à UDF em SQL. Os resultados da função SQL correspondem aos resultados da versão em Python.

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

   Os resultados da consulta são os seguintes:

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

   Isso retorna `true` para o último conjunto de valores a ser comparado.

1. Use uma instrução DROP com CASCADE para descartar a função definida pelo usuário e a visão materializada que faz referência a ela. 

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

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