

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di una funzione definita dall'utente (UDF) in una vista materializzata
<a name="materialized-view-UDFs"></a>

Puoi utilizzare una UDF scalare in una vista materializzata di Amazon Redshift. Definirle in Python o SQL e fare riferimento ad esse nella definizione della vista materializzata.

## Fare riferimento a una UDF in una vista materializzata
<a name="materialized-view-UDFs-examples"></a>

La procedura seguente mostra come UDFs utilizzarlo per eseguire semplici confronti aritmetici, in una definizione di vista materializzata.

1. Creare una tabella da utilizzare nella definizione della vista materializzata.

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

1. Creare una funzione scalare definita dall'utente in Python che restituisca un valore booleano che indica se un numero intero è più grande di un numero intero di confronto.

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

   Facoltativamente, creare una UDF funzionalmente simile con SQL, che è possibile usare per confrontare i risultati con la prima. 

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

1. Creare una vista materializzata che selezioni dalla tabella creata e faccia riferimento alla UDF. 

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

   Facoltativamente, è possibile creare una vista materializzata che fa riferimento alla UDF SQL.

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

1. Aggiungere i dati alla tabella e aggiornare la vista materializzata.

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

   ```
   REFRESH MATERIALIZED VIEW mv_python_udf;
   ```

   Facoltativamente, è possibile creare una vista materializzata che fa riferimento alla UDF SQL.

   ```
   REFRESH MATERIALIZED VIEW mv_sql_udf;
   ```

1. Eseguire una query sui dati dalla vista materializzata.

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

   I risultati della query sono i seguenti:

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

   Ciò restituisce `true` per l'ultimo set di valori perché il valore della colonna `a` (4) è maggiore del valore della colonna `b` (2).

1. Facoltativamente, puoi eseguire query su una vista materializzata che fa riferimento alla UDF SQL. I risultati della funzione SQL corrispondono ai risultati della versione Python.

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

   I risultati della query sono i seguenti:

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

   Ciò restituisce `true` per l'ultimo set di valori da confrontare.

1. Utilizzare un'istruzione DROP con CASCADE per eliminare la funzione definita dall'utente e la vista materializzata che vi fa riferimento. 

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

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