

 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à.

# Viste materializzate in Amazon Redshift
<a name="materialized-view-overview"></a>

In questa sezione viene descritto come creare e utilizzare le viste materializzate in Amazon Redshift. Una vista materializzata è un oggetto di database che archivia i risultati di una query, che può essere utilizzata per migliorare le prestazioni e l’efficienza.

In un ambiente di data warehouse, le applicazioni spesso devono eseguire query complesse su tabelle di grandi dimensioni. Un esempio sono le istruzioni SELECT che eseguono unioni e aggregazioni multitabella su tabelle che contengono miliardi di righe. L'elaborazione di queste query può essere costosa in termini di risorse di sistema e di tempo necessario per ottenere i risultati.

Le viste materializzate in Amazon Redshift offrono un modo per affrontare questi problemi. Una *vista materializzata* contiene un set di risultati pre-elaborato, basato su una query SQL su una o più tabelle di base. È possibile eseguire istruzioni SELECT per eseguire una query su una vista materializzata allo stesso modo in cui è possibile eseguire query su altre tabelle o viste del database. Amazon Redshift restituisce i risultati pre-elaborati dalla vista materializzata senza dover accedere in alcun modo alle tabelle di base. Dal punto di vista dell'utente, i risultati della query vengono restituiti molto più rapidamente rispetto al recupero degli stessi dati dalle tabelle di base.

Le viste materializzate sono particolarmente utili per velocizzare le query prevedibili e ripetute. Invece di eseguire query ad alto uso di risorse su tabelle di database di grandi dimensioni (come aggregazioni o più join), le applicazioni possono eseguire query su una vista materializzata e recuperare un set di risultati pre-elaborato. Ad esempio, considera lo scenario in cui viene utilizzata una serie di query per popolare le dashboard, come Amazon Quick. Questo caso d'uso è ideale per una vista materializzata, perché le query sono prevedibili e ripetute più e più volte. 

È possibile definire una vista materializzata in termini di altre viste materializzate. Utilizzare *viste materializzate su viste materializzate* per espandere la capacità delle viste materializzate. In questo approccio, una vista materializzata esistente svolge lo stesso ruolo di una tabella di base per il recupero dei dati da parte della query. 

Questo approccio è particolarmente utile per riutilizzare i join precalcolati per diverse opzioni aggregate o GROUP BY. Ad esempio, è possibile utilizzare una vista materializzata che unisce le informazioni del cliente (contenenti milioni di righe) alle informazioni dettagliate sull'ordine di un articolo (contenenti miliardi di righe). Si tratta di una query costosa da calcolare ripetutamente on demand. È possibile utilizzare diverse opzioni GROUP BY per le viste materializzate create sopra questa vista materializzata e unirsi ad altre tabelle. In questo modo si risparmia tempo di calcolo altrimenti utilizzato per eseguire il costoso join sottostante ogni volta. La tabella [STV\$1MV\$1DEPS](r_STV_MV_DEPS.md) riporta le dipendenze di una vista materializzata su altre viste materializzate. 

Quando si crea una vista materializzata, Amazon Redshift esegue l'istruzione SQL specificata dall'utente per raccogliere i dati dalla tabella o dalle tabelle di base e memorizzare il set di risultati. Nella figura seguente viene fornita una panoramica della vista `tickets_mv` materializzata definita da una query SQL utilizzando due tabelle di base `events` e `sales`.

![\[Una vista materializzata definita con i dati di due tabelle di base.\]](http://docs.aws.amazon.com/it_it/redshift/latest/dg/images/materialized-view.png)


È quindi possibile utilizzare queste viste materializzate nelle query per velocizzarle. Inoltre, Amazon Redshift può riscrivere automaticamente queste query per utilizzare le viste materializzate, anche quando la query non fa esplicito riferimento a una vista materializzata. La riscrittura automatica delle query è particolarmente efficace per migliorare le prestazioni quando non è possibile modificare le query per utilizzare le viste materializzate.

Per aggiornare i dati nella vista materializzata, è possibile utilizzare l'istruzione REFRESH MATERIALIZED VIEW in qualsiasi momento per aggiornare manualmente le viste materializzate. Amazon Redshift identifica le modifiche apportate alla tabella o alle tabelle di base e quindi applica tali modifiche alla vista materializzata. Poiché la riscrittura automatica delle query richiede che le viste materializzate siano aggiornate , in qualità di proprietario delle viste materializzate, assicurarsi di aggiornare le viste ogni volta che viene modificata una tabella di base. 

Amazon Redshift fornisce alcuni metodi per mantenere aggiornate le viste materializzate per la riscrittura automatica. È possibile configurare le viste materializzate con l'opzione di aggiornamento automatico per aggiornare le viste materializzate quando le tabelle di base delle viste materializzate vengono aggiornate. Questa operazione di aggiornamento automatico viene eseguita in un momento in cui le risorse del cluster sono disponibili per ridurre al minimo le interruzioni di altri carichi di lavoro. Poiché la pianificazione dell'aggiornamento automatico dipende dal carico di lavoro, è possibile avere un maggiore controllo sul momento in cui Amazon Redshift aggiorna le viste materializzate. È possibile pianificare un processo di aggiornamento delle viste materializzate utilizzando l'API del pianificatore di Amazon Redshift e l'integrazione della console. Per ulteriori informazioni sulla pianificazione delle query, consultare [Pianificazione di una query sulla console Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-schedule-query.html). 

Questa operazione è particolarmente utile quando esiste un requisito di Service Level Agreement (SLA) per up-to-date i dati da una vista materializzata. È inoltre possibile aggiornare manualmente tutte le viste materializzate che è possibile aggiornare automaticamente. Per informazioni su come creare viste materializzate, consultare [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

Puoi emettere istruzioni SELECT per eseguire query su una vista materializzata. Per informazioni su come eseguire query sulle viste materializzate, consultare [Query sulle viste materializzate](materialized-view-query.md). Dopo un certo periodo di tempo il set di risultati diventa obsoleto, quando altri dati vengono inseriti, aggiornati ed eliminati nelle tabelle di base. Puoi aggiornare la vista materializzata in qualsiasi momento per aggiornarla con le ultime modifiche delle tabelle di base. Per informazioni su come aggiornare le viste materializzate, consultare [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md).

Per informazioni sui comandi SQL per creare e gestire le viste materializzate, consultare i seguenti argomenti sui comandi:
+ [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)
+ [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)

Per informazioni sulle tabelle di sistema e le viste per monitorare le viste materializzate, consultare i seguenti argomenti: 
+ [STV\$1MV\$1INFO](r_STV_MV_INFO.md)
+ [STL\$1MV\$1STATE](r_STL_MV_STATE.md)
+ [SVL\$1MV\$1REFRESH\$1STATUS](r_SVL_MV_REFRESH_STATUS.md)
+ [STV\$1MV\$1DEPS](r_STV_MV_DEPS.md)

**Topics**
+ [Query sulle viste materializzate](materialized-view-query.md)
+ [Riscrittura automatica delle query per utilizzare le viste materializzate](materialized-view-auto-rewrite.md)
+ [Viste materializzate per le tabelle di data lake esterne in Amazon Redshift Spectrum](materialized-view-external-table.md)
+ [Aggiornamento di una vista materializzata](materialized-view-refresh.md)
+ [Viste materializzate automatizzate](materialized-view-auto-mv.md)
+ [Utilizzo di una funzione definita dall'utente (UDF) in una vista materializzata](materialized-view-UDFs.md)
+ [Importazione in streaming in una vista materializzata](materialized-view-streaming-ingestion.md)

# Query sulle viste materializzate
<a name="materialized-view-query"></a>

È possibile utilizzare una vista materializzata in qualsiasi query SQL facendo riferimento al nome della vista materializzata come origine dati, come nel caso di una tabella o di una vista standard.

Quando una query accede a una vista materializzata, vede esclusivamente i dati memorizzati nella vista materializzata relativi all'ultimo aggiornamento. Perciò la query potrebbe non vedere tutte le ultime modifiche apportate alle corrispondenti tabelle di base della vista materializzata.

Se altri utenti desiderano eseguire delle query sulla vista materializzata, il proprietario della vista materializzata deve concedere l'autorizzazione SELECT a tali utenti. Gli altri utenti non hanno bisogno dell'autorizzazione SELECT sulle tabelle di base sottostanti. Il proprietario della vista materializzata può anche revocare l'autorizzazione SELECT agli altri utenti per impedire che possano eseguire query sulla vista materializzata. Tieni presente che gli altri utenti hanno ancora bisogno dell’autorizzazione USAGE per gli schemi che contengono le tabelle di base della vista materializzata.

Se il proprietario della vista materializzata non dispone più dell’autorizzazione SELECT per le tabelle di base sottostanti:
+ Il proprietario non può più eseguire query sulla vista materializzata. 
+ Gli altri utenti che dispongono dell'autorizzazione SELECT sulla vista materializzata non possono più eseguire query su di essa.

Ciò è limitato alle autorizzazioni locali. Le modifiche alle autorizzazioni gestite da Lake Formation non vengono verificate eseguendo query sulla vista materializzata. Ciò significa che, se una tabella di base sottostante è gestita da Lake Formation e le autorizzazioni di selezione per la tabella vengono revocate in Lake Formation, puoi comunque eseguire query sulla vista materializzata. 

Nell'esempio seguente viene eseguita una query sulla vista materializzata `tickets_mv` Per ulteriori informazioni sul comando SQL utilizzato per creare una vista materializzata, consultare [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

```
SELECT sold
FROM tickets_mv
WHERE catgroup = 'Concerts';
```

Poiché i risultati della query sono pre-calcolati, non è necessario accedere alle tabelle sottostanti (`category`, `event` e `sales`). Amazon Redshift può restituire i risultati direttamente da `tickets_mv`.

# Riscrittura automatica delle query per utilizzare le viste materializzate
<a name="materialized-view-auto-rewrite"></a>

È possibile utilizzare la riscrittura automatica delle query delle viste materializzate in Amazon Redshift per consentire ad Amazon Redshift di riscrivere le query per utilizzare le viste materializzate. Questa operazione consente di accelerare i carichi di lavoro delle query anche per le query che non fanno riferimento esplicitamente a una vista materializzata. Quando Amazon Redshift riscrive le query, utilizza solo viste materializzate aggiornate .

## Note per l’utilizzo
<a name="mv_auto-rewrite_usage"></a>

Per verificare se per una query viene utilizzata la riscrittura automatica delle query, è possibile esaminare il piano di query o STL\$1EXPLAIN. Di seguito sono illustrati un'istruzione SELECT e l'output EXPLAIN del piano di query originale.

```
SELECT catgroup, SUM(qtysold) AS sold
FROM category c, event e, sales s
WHERE c.catid = e.catid AND e.eventid = s.eventid
GROUP BY 1;

EXPLAIN 
 XN HashAggregate  (cost=920021.24..920021.24 rows=1 width=35)
   ->  XN Hash Join DS_BCAST_INNER  (cost=440004.53..920021.22 rows=4 width=35)
         Hash Cond: ("outer".eventid = "inner".eventid)
         ->  XN Seq Scan on sales s  (cost=0.00..7.40 rows=740 width=6)
         ->  XN Hash  (cost=440004.52..440004.52 rows=1 width=37)
               ->  XN Hash Join DS_BCAST_INNER  (cost=0.01..440004.52 rows=1 width=37)
                     Hash Cond: ("outer".catid = "inner".catid)
                     ->  XN Seq Scan on event e  (cost=0.00..2.00 rows=200 width=6)
                     ->  XN Hash  (cost=0.01..0.01 rows=1 width=35)
                           ->  XN Seq Scan on category c  (cost=0.00..0.01 rows=1 width=35)
```

Quanto segue mostra l'output EXPLAIN dopo una riscrittura automatica riuscita. Questo output include una scansione della vista materializzata nel piano di query che sostituisce parti del piano di query originale. 

```
* EXPLAIN 
     XN HashAggregate  (cost=11.85..12.35 rows=200 width=41)
       ->  XN Seq Scan on mv_tbl__tickets_mv__0 derived_table1  (cost=0.00..7.90 rows=790 width=41)
```

Per la riscrittura automatica delle query vengono prese in considerazione solo le up-to-date (nuove) viste materializzate, indipendentemente dalla strategia di aggiornamento, ad esempio automatica, pianificata o manuale. Pertanto, la query originale restituisce risultati. up-to-date Quando nelle query viene esplicitamente fatto riferimento a una vista materializzata, Amazon Redshift accede ai dati attualmente memorizzati nella vista materializzata. Questi dati potrebbero non riflettere le ultime modifiche delle tabelle di base della vista materializzata.

È possibile utilizzare la riscrittura automatica delle query delle viste materializzate create nella versione del cluster 1.0.20949 o successiva.

È possibile arrestare la riscrittura automatica delle query a livello di sessione utilizzando SET mv\$1enable\$1aqmv\$1for\$1session impostato su FALSE.

## Come funziona la riscrittura automatica delle query delle viste materializzate
<a name="mv_auto-rewrite_behavior"></a>

Sulla base dell’ottimizzazione interna, Amazon Redshift può decidere di invocare la riscrittura automatica delle query delle viste materializzate in modo trasparente per garantire l’esecuzione delle query ottimale con i tempi di query più bassi possibili.

Ad esempio, supponiamo che l’utente A crei una vista materializzata M1 per la tabella T1 con la query `SELECT * FROM T1`. L’utente A dispone dei privilegi SELECT completi per T1. L’utente A concede l’accesso a M1 a tutti gli utenti, incluso l’utente B. Tuttavia, quando l’utente B tenta di eseguire query direttamente su T1, gli viene negato l’accesso. Ciò perché l’utente B non dispone dei privilegi SELECT per T1.

Dopo qualche tempo l’utente B tenta nuovamente di eseguire query su T1, ma questa volta ottiene i risultati da T1. Ciò perché la riscrittura automatica delle query con la vista materializzata ha riscritto la query dell’utente B per la tabella T1 (`SELECT <cols> FROM T1`) in una query sulla vista materializzata M1 (`SELECT <cols> FROM M1`). 

## Limitazioni
<a name="mv_auto-rewrite_limitations"></a>

Di seguito sono riportate le limitazioni per l'utilizzo della riscrittura automatica delle query delle viste materializzate:
+ La riscrittura automatica delle query funziona con viste materializzate che non fanno riferimento o includono uno dei seguenti elementi:
  + Sottoquery
  + Join left, right o full outer
  + Operazioni del set 
  + Qualsiasi funzione di aggregazione, tranne SUM, COUNT, MIN, MAX e AVG. (Queste sono le uniche funzioni aggregate che funzionano con la riscrittura automatica delle query.)
  + Qualsiasi funzione aggregata con DISTINCT
  + Qualsiasi funzione finestra
  + Clausole SELECT DISTINCT o HAVING
  + Tabelle esterne o condivise
  + Altre viste materializzate
+ La riscrittura automatica delle query riscrive le query SELECT che fanno riferimento alle tabelle Amazon Redshift definite dall'utente. Amazon Redshift non riscrive le seguenti query:
  + Istruzioni CREATE TABLE AS
  + Istruzioni SELECT INTO
  + Query su cataloghi o tabelle di sistema
  + Query con join esterni o una clausola SELECT DISTINCT
+ Se una query non viene riscritta automaticamente, verifica se disponi dell'autorizzazione SELECT sulla vista materializzata specificata e che l'opzione [mv\$1enable\$1aqmv\$1for\$1session](r_mv_enable_aqmv_for_session.md) sia impostata su TRUE. 

  È inoltre possibile verificare se le viste materializzate sono idonee per la riscrittura automatica delle query ispezionando STV\$1MV\$1INFO. Per ulteriori informazioni, consulta [STV\$1MV\$1INFO](r_STV_MV_INFO.md).

# Viste materializzate per le tabelle di data lake esterne in Amazon Redshift Spectrum
<a name="materialized-view-external-table"></a>

Le viste materializzate possono fornire una manutenzione incrementale per le tabelle di data lake esterne. In un aggiornamento incrementale, Amazon Redshift aggiorna i dati nella vista materializzata solo con le modifiche ai dati nelle tabelle di base dall’ultimo aggiornamento. La manutenzione incrementale è più conveniente rispetto al ricalcolo completo della vista materializzata dopo ogni modifica dei dati per la tabella di base.

Quando utilizzi le viste materializzate per almeno una tabella esterna, la creazione di viste materializzate è incrementale per:
+ Tabelle di data lake standard, partizionate e non partizionate, con file di dati in qualsiasi formato supportato (Parquet, Avro, CSV, ecc.).
+ Tabelle Apache Iceberg, partizionate e non partizionate, con e. copy-on-write merge-on-read
+ Tabelle di Amazon Redshift Spectrum sottoposte a join con qualsiasi tabella Amazon Redshift nello stesso database.

L’aggiornamento della vista materializzata è incrementale per:
+ Tabelle di data lake standard dopo la sovrascrittura di S3 DELETE o PUT (eliminazione dei file di dati), se la vista materializzata non esegue l’aggregazione.
+ Tabelle di Apache Iceberg dopo INSERT, DELETE, UPDATE o la compattazione delle tabelle.

Per ulteriori informazioni su Amazon Redshift Spectrum, consulta [Amazon Redshift Spectrum](c-using-spectrum.md).

## Limitazioni
<a name="materialized-view-external-table-limitations"></a>

Le limitazioni generali per le viste materializzate continuano ad applicarsi per le viste materializzate per le tabelle di data lake. Per ulteriori informazioni, consulta [Aggiornamento di una vista materializzata](materialized-view-refresh.md). Inoltre considera le seguenti limitazioni quando utilizzi le viste materializzate per le tabelle di data lake esterne.
+ La creazione di viste materializzate non è incrementale per:
  + Tabelle Hudi o Delta Lake.
  + Accesso ai dati annidati di Spectrum.
  + Riferimenti alle colonne VARBYTE.
+ L’aggiornamento delle viste materializzate torna al ricalcolo completo per:
  + Tabelle di Apache Iceberg quando è scaduto uno snapshot richiesto, se la vista materializzata esegue l’aggregazione.
  + Tabelle di data lake standard dopo l’eliminazione o l’aggiornamento dei file di dati per Amazon S3, se la vista materializzata esegue l’aggregazione.
  + Le tabelle di data lake standard sono state aggiornate più di una volta all’interno di un blocco di transazioni.
  + Tabelle di data lake standard gestite da un manifesto. Per ulteriori informazioni sui manifesti, consulta [Utilizzo di un manifesto per specificare i file di dati](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-command-examples-manifest).
  + Amazon Redshift torna al ricalcolo completo se si prevede che questo sia più performante, in particolare per le viste materializzate che contengono join e più di una tabella di base è stata aggiornata dall’ultimo aggiornamento.
+ Nelle tabelle di Apache Iceberg, l’aggiornamento delle viste materializzate può gestire solo fino a quattro milioni di posizioni eliminate in un singolo file di dati. Una volta che questo limite è stato raggiunto, la tabella base di Apache Iceberg deve essere compattata per continuare ad aggiornare la vista materializzata.
+ Nelle tabelle di Apache Iceberg, il dimensionamento simultaneo non è supportata per la creazione e l’aggiornamento delle viste materializzate.
+ Le funzionalità di autonomia non sono supportate. Tra queste figurano le [viste materializzate automatizzate](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-auto-mv.html) e la [riscrittura automatica delle query](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-auto-rewrite.html). 
+ Quando una vista materializzata incrementale viene aggiornata, le autorizzazioni IAM si applicano solo alle parti a cui accedi dalle tabelle di base di Amazon Redshift. 
+ Le modifiche alle autorizzazioni gestite da Lake Formation non vengono verificate eseguendo query su una vista materializzata. Ciò significa che, se per una tabella di data lake è definita una vista materializzata e i privilegi di selezione vengono rimossi dalla tabella con Lake Formation, puoi continuare a eseguire query sulla vista materializzata.

# Aggiornamento di una vista materializzata
<a name="materialized-view-refresh"></a>

In questo argomento viene descritto come aggiornare i dati in una vista materializzata dalle tabelle sottostanti.

Quando crei una vista materializzata, il relativo contenuto riflette lo stato delle relazioni del database sottostanti (tabelle o altre viste materializzate) in quel momento. I dati nella vista materializzata rimangono invariati, anche quando le applicazioni apportano modifiche ai dati nelle tabelle sottostanti. Per aggiornare i dati nella vista materializzata, è possibile utilizzare l'istruzione `REFRESH MATERIALIZED VIEW` in qualsiasi momento per aggiornare manualmente le viste materializzate. Quando utilizzi questa istruzione, Amazon Redshift identifica le modifiche apportate nelle relazioni di base e applica tali modifiche alla vista materializzata.

Amazon Redshift dispone di due strategie per aggiornare una vista materializzata: 
+ In molti casi, Amazon Redshift è in grado di eseguire un aggiornamento incrementale. In un *aggiornamento incrementale*, Amazon Redshift identifica rapidamente le modifiche ai dati nelle relazioni di base dall’ultimo aggiornamento e aggiorna i dati nella vista materializzata. L'aggiornamento incrementale è supportato o segue costrutti SQL utilizzati nella query durante la definizione della vista materializzata.
  + Costrutti che contengono le clausole SELECT, FROM, [INNER] JOIN, WHERE, GROUP BY, HAVING.
  + Costrutti contenenti aggregazioni, come SUM, MIN, MAX, AVG e COUNT.
  + Molte funzioni SQL integrate, in particolare quelle immutabili, forniscono gli stessi argomenti di input e producono sempre lo stesso output. 

  L'aggiornamento incrementale è supportato anche per una vista materializzata basata su una tabella di datashare o una vista materializzata.
+ Se non è possibile eseguire un aggiornamento incrementale, allora Amazon Redshift esegue un aggiornamento completo. Un *aggiornamento completo* esegue nuovamente il comando SQL sottostante, sostituendo tutti i dati della vista materializzata.
+ Amazon Redshift sceglie automaticamente il metodo di aggiornamento per una vista materializzata a seconda della query SELECT utilizzata per definire la vista materializzata. 

## Viste materializzate annidate
<a name="materialized-view-refresh-nested"></a>

Una vista materializzata può essere definita sopra altre viste materializzate. Per aggiornare una vista materializzata di questo tipo, devi utilizzare esplicitamente la parola chiave `CASCADE` nell’aggiornamento più in alto della vista materializzata. Ad esempio, supponiamo che la struttura delle viste materializzate annidate sia la seguente:

```
CREATE TABLE t(a INT);
CREATE MATERIALIZED VIEW u AS SELECT * FROM t;
CREATE MATERIALIZED VIEW v AS SELECT * FROM u;
CREATE MATERIALIZED VIEW w AS SELECT * FROM v;

-- w -> v -> u -> t

INSERT INTO t VALUES (1);
```

Per aggiornare w completamente, hai due scelte:
+ (Consigliato) Aggiorna w usando il comando `REFRESH MATERIALIZED VIEW w CASCADE`. Questo comando esegue l’aggiornamento di tutte le viste materializzate in un’unica transazione. 
+ Aggiorna u, v e w come comandi separati, in ordine di dipendenza (prima u, poi v, poi w). 

Se la parola chiave `CASCADE` non viene utilizzata in modo esplicito, la vista materializzata viene aggiornata in modalità `RESTRICT`, aggiornando solo la vista materializzata corrente. Gli esempi seguenti mostrano un messaggio informativo quando si esegue `REFRESH MATERIALIZED VIEW` su una vista materializzata che dipende da una vista materializzata. out-of-date

```
REFRESH MATERIALIZED VIEW w;
INFO:  Materialized view w is already up to date.  However, it depends on another materialized view that is not up to date.

REFRESH MATERIALIZED VIEW w CASCADE;
INFO:  Materialized view w was incrementally updated successfully.
```

```
REFRESH MATERIALIZED VIEW v;
INFO: Materialized view v is already up to date. However, it depends on another materialized view that is not up to date.

REFRESH MATERIALIZED VIEW v CASCADE;
INFO: Materialized view v was incrementally updated successfully.
```

Negli esempi precedenti, con l’opzione di aggiornamento a cascata, la vista materializzata u viene aggiornata per prima, quindi viene aggiornata la vista materializzata v e la vista materializzata w non viene aggiornata.

L'esempio seguente mostra come creare un piano di aggiornamento completo per una vista materializzata a livello di programmazione. Per aggiornare la vista materializzata v, aggiornare prima la vista materializzata u. Per aggiornare la vista materializzata w, aggiornare prima la vista materializzata u e poi la vista materializzata v.

```
WITH RECURSIVE recursive_deps (mv_tgt, lvl, mv_dep) AS
( SELECT trim(name) as mv_tgt, 0 as lvl, trim(ref_name) as mv_dep
  FROM stv_mv_deps
  UNION ALL
  SELECT R.mv_tgt, R.lvl+1 as lvl, trim(S.ref_name) as mv_dep
  FROM stv_mv_deps S, recursive_deps R
  WHERE R.mv_dep = S.name
)

SELECT mv_tgt, mv_dep from recursive_deps
ORDER BY mv_tgt, lvl DESC;

 mv_tgt | mv_dep
--------+--------
 v      | u
 w      | u
 w      | v
(3 rows)
```

## Limitazioni
<a name="materialized-view-refresh-limitations"></a>

Amazon Redshift non supporta l’aggiornamento a cascata per le viste materializzate basate su origini diverse da:
+ Tabelle locali
+ Locale MVs
+ Streaming MVs

Amazon Redshift attualmente non supporta l'aggiornamento incrementale per le viste materializzate definite con una query utilizzando uno dei seguenti elementi SQL:
+ OUTER JOIN (RIGHT, LEFT o FULL).
+ Operazioni di set: UNION, INTERSECT, EXCEPT e MINUS
+ Le funzioni di aggregazione MEDIAN, PERCENTILE\$1CONT, LISTAGG, STDDEV\$1SAMP, STDDEV\$1POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE e le funzioni di aggregazione bitwise
**Nota**  
Sono supportate le funzioni di aggregazione COUNT, SUM e AVG.
+ Funzioni di aggregazione di tipo DISTINCT, come DISTINCT COUNT, DISTINCT SUM, ecc.
+ Funzioni finestra
+ Query che utilizza tabelle temporanee per l'ottimizzazione delle query, ad esempio l'ottimizzazione delle espressioni secondarie comuni.
+ Sottoquery
+ Tabelle esterne che fanno riferimento ai seguenti formati nella query che definisce la vista materializzata. 
  +  Delta Lake 
  +  Hudi 

  L’aggiornamento incrementale è supportato per le viste materializzate definite con formati diversi da quelli precedenti. Per ulteriori informazioni, consulta [Viste materializzate per le tabelle di data lake esterne in Amazon Redshift SpectrumViste materializzate per le tabelle di data lake esterne](materialized-view-external-table.md). 

## Aggiornamento automatico di una vista materializzata
<a name="materialized-view-auto-refresh"></a>

Amazon Redshift può aggiornare automaticamente le viste materializzate con up-to-date i dati delle sue tabelle di base quando le viste materializzate vengono create o modificate per avere l'opzione di aggiornamento automatico. Dopo le modifiche alle tabelle di base, Amazon Redshift aggiorna automaticamente le viste materializzate il prima possibile.

Per completare l'aggiornamento delle viste materializzate più importanti con un impatto minimo sui carichi di lavoro attivi nel cluster, Amazon Redshift considera diversi fattori. Questi fattori includono il carico di sistema corrente, le risorse necessarie per l'aggiornamento, le risorse cluster disponibili e la frequenza di utilizzo delle viste materializzate. 

Amazon Redshift assegna la priorità ai carichi di lavoro rispetto all'aggiornamento automatico e potrebbe interrompere l'aggiornamento automatico per preservare le prestazioni del carico di lavoro degli utenti. Questo approccio potrebbe ritardare l'aggiornamento di alcune viste materializzate. In alcuni casi, è possibile che sia necessario usare un comportamento di aggiornamento più deterministico per le viste materializzate. In tal caso, valutare l'utilizzo dell'aggiornamento manuale come descritto in [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md) o l'aggiornamento pianificato utilizzando le operazioni API del pianificatore Amazon Redshift o la console.

È possibile impostare l'aggiornamento automatico per le viste materializzate utilizzando CREATE MATERIALIZED VIEW. È inoltre possibile utilizzare la clausola AUTO REFRESH per aggiornare automaticamente le viste materializzate. Per ulteriori informazioni sulla creazione di viste materializzate, consultare [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md). È possibile abilitare l'aggiornamento automatico per una vista materializzata corrente utilizzando [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md).

Durante l'aggiornamento delle viste materializzate, considerare quanto riportato di seguito:
+ È comunque possibile aggiornare esplicitamente una vista materializzata utilizzando il comando REFRESH MATERIALIZED VIEW anche se non è stato abilitato l'aggiornamento automatico per la vista materializzata.
+ L'aggiornamento automatico è supportato sulle viste materializzate definite nelle tabelle di condivisione dei dati o nelle tabelle Iceberg, ma non sulla combinazione delle due.
+ Per lo stato di aggiornamento, è possibile controllare SVL\$1MV\$1REFRESH\$1STATUS, che registra le query avviate dall'utente o aggiornate automaticamente. 
+ Per eseguire REFRESH sulle viste materializzate di solo ricalcolo, assicurarsi di disporre dell'autorizzazione CREATE per gli schemi. Per ulteriori informazioni, consulta [GRANT](r_GRANT.md).

 A partire dal 27 febbraio 2026, le query Auto REFRESH per le viste materializzate di Amazon Redshift vengono eseguite come query utente anziché come processi autonomi in background. Di conseguenza, le query Auto REFRESH ora vengono eseguite con la stessa priorità delle altre query utente. 

 Questa modifica migliora la freschezza delle viste materializzate con Auto REFRESH abilitato, aiutandole a rimanere più aggiornate con le ultime modifiche alle tabelle di base rispetto al comportamento precedente. 

 Nota: la funzione di modifica del comportamento di MV Auto REFRESH è abilitata solo per i cluster Amazon Redshift Provisioned sulla traccia CORRENTE della versione di patch P198 e successive. Attualmente è disabilitata su Serverless. 

# Viste materializzate automatizzate
<a name="materialized-view-auto-mv"></a>

Questo argomento descrive come Amazon Redshift utilizza viste materializzate automatizzate per migliorare le prestazioni. Amazon Redshift crea automaticamente viste materializzate in base all’attività e alle prestazioni del database. Amazon Redshift utilizza le viste materializzate automatizzate per impostazione predefinita.

Le viste materializzate sono un potente strumento per migliorare le prestazioni delle query in Amazon Redshift. Lo fanno memorizzando un set di risultati precalcolato. Query simili non devono eseguire nuovamente la stessa logica ogni volta, perché possono recuperare record dal set di risultati esistente. Gli sviluppatori e gli analisti creano le viste materializzate dopo aver analizzato i loro carichi di lavoro per determinare quali query trarrebbero beneficio e se il costo di manutenzione di ogni vista materializzata vale la pena. Man mano che i carichi di lavoro aumentano o cambiano, queste viste materializzate devono essere revisionate per garantire che continuino a fornire vantaggi concreti in termini di prestazioni.

La funzionalità delle viste materializzate automatiche (AutoMV) di Redshift migliora le prestazioni delle query creando e gestendo automaticamente le viste materializzate basate sul monitoraggio dei carichi di lavoro e sugli algoritmi di machine learning. Di seguito sono incluse le funzionalità chiave di AutoMV:
+ *Monitoraggio continuo*: Redshift monitora continuamente il carico di lavoro utilizzando le tecniche di machine learning per identificare le opportunità di miglioramento delle prestazioni attraverso la creazione di viste materializzate.
+ *Creazione ed eliminazione automatiche*: quando il sistema rileva che una vista materializzata sarebbe utile, la crea e la mantiene automaticamente. Al contrario, se una vista materializzata automatica creata in precedenza non offre più vantaggi in termini di prestazioni, il sistema la rimuove automaticamente.
+ *Nessun requisito di attività dell’utente*: la funzionalità AutoMV funziona solo durante i periodi di scarsa attività dell’utente o di carico di lavoro contenuto in esecuzione sul cluster. Ciò garantisce che le operazioni di AutoMV non interferiscano o influiscano sui carichi di lavoro dei clienti.
+ *Picchi di utilizzo della CPU*: nei periodi di assenza di attività dei carichi di lavoro, la creazione o l’aggiornamento delle viste materializzate da parte di AutoMV può portare a picchi nell’utilizzo della CPU. Si tratta di un comportamento normale in quanto il sistema utilizza le risorse disponibili per creare e aggiornare le viste materializzate.
+ *Priorità del carico di lavoro dell’utente*: se avvii un carico di lavoro mentre è in corso un’operazione di AutoMV, l’attività di AutoMV smette di rilasciare le risorse per il carico di lavoro dell’utente. Ciò garantisce che i carichi di lavoro abbiano la priorità sulle operazioni di AutoMV.

Sebbene la funzionalità AutoMV possa causare picchi di utilizzo della CPU durante i periodi di inattività dell’utente, funziona in modo trasparente e senza influire sui carichi di lavoro. Il sistema gestisce le viste materializzate per migliorare le prestazioni delle query e contemporaneamente dà priorità ai carichi di lavoro degli utenti rispetto alle operazioni di AutoMV.

Il comportamento e le funzionalità di AutoMV sono gli stessi delle viste materializzate create dall'utente. Vengono aggiornati automaticamente e incrementalmente, utilizzando gli stessi criteri e restrizioni. Proprio come le viste materializzate create dagli utenti, [Riscrittura automatica delle query per utilizzare le viste materializzate](materialized-view-auto-rewrite.md) identifica le query che possono trarre vantaggio dalla funzionalità Auto creata dal sistema. MVs Riscrive automaticamente tali query per utilizzare Auto, migliorando le prestazioni delle query. MVs Gli sviluppatori non devono modificare le query per sfruttare AutoMV.

**Nota**  
Le viste materializzate automatizzate vengono aggiornate in modo intermittente. Le query riscritte per utilizzare AutoMV restituiscono sempre i risultati più recenti. Quando Redshift rileva che i dati non sono aggiornati, le query non vengono riscritte per eseguire la lettura da viste materializzate automatizzate. Le query selezionano invece i dati più recenti dalle tabelle di base.

Qualsiasi carico di lavoro con query utilizzate ripetutamente può trarre vantaggio da AutoMV. Casi di utilizzo comune comprendono:
+ *Dashboard*: i dashboard sono ampiamente utilizzati per fornire visualizzazioni rapide degli indicatori aziendali chiave (KPIs), degli eventi, delle tendenze e di altre metriche. Spesso hanno un layout comune con grafici e tabelle, ma mostrano viste diverse per il filtraggio o per le operazioni di selezione delle dimensioni, come il drilldown. I pannelli di controllo hanno spesso un insieme comune di query utilizzate ripetutamente con parametri diversi. Le query del pannello di controllo possono trarre grande vantaggio dalle viste materializzate automatizzate.
+  *Report*- Le query di segnalazione possono essere programmate a diverse frequenze, in base ai requisiti aziendali e al tipo di segnalazione. Inoltre, possono essere automatizzate o on demand. Una caratteristica comune delle query di segnalazione è che possono avere una lunga durata e richiedono un uso intensivo di risorse. Con AutoMV, queste query non devono essere ricalcolate ogni volta che vengono eseguite, riducendo il tempo di esecuzione per ogni query e l'utilizzo delle risorse in Redshift. 

Per disattivare le viste materializzate automatizzate, aggiornare il gruppo di parametri `auto_mv` a `false`. Per ulteriori informazioni, consultare [Gruppi di parametri di Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html) nella Guida alla gestione dei cluster Amazon Redshift.

## Ambito SQL e considerazioni per le viste materializzate automatizzate
<a name="materialized-view-auto-mv-important"></a>
+ È possibile attivare e creare una vista materializzata da una query o da una subquery, purché contenga una clausola `GROUP BY` o una delle seguenti funzioni di aggregazione: SUM, COUNT, MIN, MAX o AVG. Ma non può contenere quanto segue:
  + Join left, right o full outer
  + Funzioni di aggregazione diverse da SUM, COUNT, MIN, MAX e AVG. (Queste particolari funzioni operano con la riscrittura automatica delle query.)
  + Qualsiasi funzione di aggregazione che includa DISTINCT
  + Qualsiasi funzione finestra
  + Clausole SELECT DISTINCT o HAVING
  + Altre viste materializzate

  Non è garantito che una query che soddisfa i criteri attivi la creazione di una vista materializzata automatizzata. Il sistema determina da quali candidati creare una vista, in base al vantaggio previsto per il carico di lavoro e al costo in termini di risorse da gestire, che include il costo per l'aggiornamento del sistema. Ogni vista materializzata risultante può essere utilizzata dalla riscrittura automatica delle query.
+ Anche se AutoMV potrebbe essere attivato da una subquery o da singoli operatori di definizione, la vista materializzata risultante non conterrà subquery o operatori di definizione.
+ Per determinare se AutoMV è stato utilizzato per le query, visualizzare il piano EXPLAIN e cercare `%_auto_mv_%` nell'output. Per ulteriori informazioni, consulta [EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_EXPLAIN.html).
+ Le viste materializzate automatizzate non sono supportate nelle tabelle esterne, come unità di condivisione dati e tabelle federate.

## Limitazioni delle viste materializzate automatizzate
<a name="materialized-view-auto-mv-limitations"></a>

Di seguito sono riportate le limitazioni per l'utilizzo delle viste materializzate automatizzate:
+ *Numero massimo di visualizzazioni automatiche MVs*: il limite di visualizzazioni materializzate automatizzate è 200 per database nel cluster.
+ *Spazio di archiviazione e capacità*: una caratteristica importante di AutoMV è che viene eseguito utilizzando cicli in background di riserva per contribuire a fare in modo che i carichi di lavoro degli utenti non subiscano un impatto negativo. Se il cluster è occupato o sta esaurendo lo spazio di archiviazione, AutoMV interrompe la sua attività. In particolare, all'80% di capacità totale del cluster, non vengono create nuove viste materializzate automatizzate. Al 90% di capacità totale possono essere eliminate per facilitare l'esecuzione dei carichi di lavoro degli utenti senza un peggioramento delle prestazioni. Per ulteriori informazioni sulla determinazione della capacità dei cluster, consulta [STV\$1NODE\$1STORAGE\$1CAPACITY](r_STV_NODE_STORAGE_CAPACITY.md).

## Fatturazione per le viste materializzate automatizzate
<a name="materialized-view-auto-mv-billing"></a>

 La funzionalità di ottimizzazione automatica di Amazon Redshift crea e aggiorna le viste materializzate automatizzate. Non sono previsti costi per le risorse di calcolo per questo processo. L'archiviazione delle viste materializzate automatizzate viene addebitata alla normale tariffa di archiviazione. Per ulteriori informazioni sui prezzi, consultare [Prezzi di Amazon Redshift](https://aws.amazon.com/redshift/pricing/).

## Risorse aggiuntive
<a name="materialized-view-auto-mv-resources"></a>

 Il seguente post sul blog fornisce ulteriori informazioni sulle viste materializzate automatizzate. Descrive nel dettaglio come vengono create, gestite ed eliminate. Spiega anche gli algoritmi alla base di queste decisioni: [Optimize your Amazon Redshift query performance with automated materialized views](https://aws.amazon.com/blogs//big-data/optimize-your-amazon-redshift-query-performance-with-automated-materialized-views/) (Ottimizzazione delle prestazioni delle query su Amazon Redshift con viste materializzate automatizzate).

 Questo video inizia con una spiegazione delle viste materializzate e mostra come migliorano le prestazioni e si risparmiano risorse. Fornisce quindi una spiegazione approfondita delle viste materializzate automatizzate con un'animazione del flusso di processo e una dimostrazione dal vivo. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/-85GSBQOBTA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/-85GSBQOBTA)


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

# Importazione in streaming in una vista materializzata
<a name="materialized-view-streaming-ingestion"></a>

In questo argomento viene descritto come utilizzare le viste materializzate per un rapido accesso ai dati in streaming.

 L’importazione in streaming comporta l’importazione dei dati a bassa latenza e ad alta velocità dal [flusso di dati Amazon Kinesis](https://aws.amazon.com//kinesis/data-streams/) e da [Streaming gestito da Amazon per Apache Kafka](https://aws.amazon.com//msk/) in un database Amazon Redshift con provisioning o Amazon Redshift serverless. I dati arrivano in una vista materializzata di Redshift configurata a tale scopo. Ciò si traduce in un rapido accesso ai dati esterni. L’importazione in streaming riduce i tempi di accesso ai dati e taglia i costi di storage. Puoi configurarla per il cluster Amazon Redshift o per il gruppo di lavoro Amazon Redshift serverless, utilizzando una piccola raccolta di comandi SQL. Dopo la configurazione, l’aggiornamento di ciascuna vista materializzata può importare centinaia di megabyte di dati al secondo. 

## In che modo i dati fluiscono da un servizio di streaming a Redshift
<a name="materialized-view-streaming-ingestion-data-flow"></a>

 Consente di comprendere come funziona l’importazione in streaming e gli oggetti di database utilizzati nel processo. I dati fluiscono direttamente da un provider di flussi di dati a un cluster con provisioning Amazon Redshift o a un gruppo di lavoro Amazon Redshift serverless. Non esiste un’area di destinazione temporanea, come un bucket Amazon S3. Il cluster con provisioning o il gruppo di lavoro è il consumer del flusso. Nel database Redshift, i dati letti dal flusso finiscono in una vista materializzata. I dati vengono elaborati non appena arrivano. Ad esempio, i valori JSON possono essere consumati e mappati alle colonne di dati di una vista materializzata, con SQL. Quando la vista materializzata viene aggiornata, Redshift utilizza i dati dei shard di dati Kinesis allocati o delle partizioni Kafka fino a quando la vista non viene aggiornata con il flusso. 

 I casi d’uso per l’importazione in streaming di Amazon Redshift richiedono la gestione di dati generati continuamente e che devono essere elaborati entro un breve periodo, o *latenza*, dalla loro generazione. Questo si chiama comunemente analisi dei dati *quasi in tempo reale*. Le origini possono includere i dispositivi IT, i dispositivi di telemetria di sistema e i dati di clickstream di un sito web o un’applicazione occupati.

## Best practice di analisi dei dati per il miglioramento delle prestazioni
<a name="materialized-view-streaming-recommendations"></a>

Quando configuri l’importazione in streaming, sono disponibili opzioni per analizzare i dati in entrata. Le best practice possono includere l’esecuzione della logica aziendale o la formattazione all’arrivo dei dati. Consigliamo di seguire le best practice per evitare errori o perdite di dati. Queste derivano dai test interni e dall’assistenza dei clienti nella risoluzione dei problemi di configurazione e analisi.
+ **Estrazione di valori dai dati in streaming**: se utilizzi la funzione [JSON\$1EXTRACT\$1PATH\$1TEXT](https://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_PATH_TEXT.html) nella definizione della vista materializzata per analizzare o *suddividere* i dati JSON in streaming, ciò può influire in modo significativo sulle prestazioni e sulla latenza. Per spiegare, per ogni colonna estratta con JSON\$1EXTRACT\$1PATH\$1TEXT, i dati JSON in entrata vengono analizzati di nuovo. Successivamente vengono eseguiti la conversione dei tipi di dati, il filtraggio e i calcoli della logica aziendale. Ciò significa, ad esempio, che, se estrai 10 colonne dai dati JSON, ogni record JSON viene analizzato 10 volte ed è inclusa la logica aggiuntiva. Ciò si traduce in una maggiore latenza di importazione. Un approccio alternativo che consigliamo consiste nell’utilizzare la [funzione JSON\$1PARSE](https://docs.aws.amazon.com/redshift/latest/dg/JSON_PARSE.html) per convertire i record JSON nel tipo di dati SUPER di Redshift. Dopo che i dati in streaming arrivano nella vista materializzata, utilizza PartiQL per estrarre singole stringhe dalla rappresentazione SUPER dei dati JSON. Per ulteriori informazioni, consulta [Esecuzione di query sui dati semistrutturati](https://docs.aws.amazon.com/redshift/latest/dg/query-super.html).

   Inoltre tieni presente che JSON\$1EXTRACT\$1PATH\$1TEXT ha una dimensione massima dei dati di 64 KB. Pertanto, se un record JSON è più grande di 64 KB, l’elaborazione con JSON\$1EXTRACT\$1PATH\$1TEXT restituisce un errore. 
+  **Mappatura di uno Amazon Kinesis Data Streams stream o di un argomento di Amazon MSK su più viste materializzate**: non è consigliabile creare più viste materializzate per importare dati da un singolo flusso o argomento. Questo perché ogni vista materializzata crea un consumer per ogni shard nel flusso di dati o nella partizione Kinesis nell’argomento Kafka. Ciò può comportare una limitazione o un superamento del throughput del flusso o dell’argomento. Inoltre può comportare costi più elevati perché importi gli stessi dati più volte. Quando configuri l’importazione in streaming, consigliamo di creare una vista materializzata per ogni flusso o argomento. 

  Se il tuo caso d'uso richiede l'inserimento di dati da un flusso KDS o da un argomento MSK in più viste materializzate, consulta il [blog AWS Big Data](https://aws.amazon.com/blogs/big-data/), in particolare sulle [migliori pratiche per implementare l'analisi usando near-real-time Amazon Redshift Streaming Ingestion with Amazon](https://aws.amazon.com/blogs/big-data/best-practices-to-implement-near-real-time-analytics-using-amazon-redshift-streaming-ingestion-with-amazon-msk/) MSK, prima di farlo.

## Comportamento dell’importazione in streaming e tipi di dati
<a name="materialized-view-streaming-ingestion-limitations"></a>

Nella tabella seguente sono descritti i dettagli del comportamento tecnico e i limiti di dimensione per vari tipi di dati. Consigliamo di acquisire dimestichezza prima di configurare una vista materializzata per l’importazione in streaming.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/redshift/latest/dg/materialized-view-streaming-ingestion.html)

# Nozioni di base sull'importazione dati in streaming da Amazon Kinesis Data Streams
<a name="materialized-view-streaming-ingestion-getting-started"></a>

In questo argomento viene descritto come utilizzare i dati in streaming dal flusso di dati Kinesis con una vista materializzata.

 L'impostazione dell'importazione dati in streaming di Amazon Redshift comporta la creazione di uno schema esterno che mappi all'origine dati in streaming e la creazione di una vista materializzata che faccia riferimento allo schema esterno. L'importazione dati in streaming di Amazon Redshift supporta Kinesis Data Streams come fonte. Pertanto, prima di configurare l'importazione dati in streaming, assicurati che sia presente una fonte di Amazon Kinesis Data Streams. Se non è disponibile, segui le istruzioni riportate nella sezione [Nozioni di base su Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/getting-started.html) della documentazione di Amazon Kinesis oppure crea una fonte nella console usando le istruzioni riportate in [Creazione di un flusso tramite la console di gestione AWS](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-create-a-stream.html).

 L'importazione dati in streaming di Amazon Redshift utilizza una vista materializzata, che viene aggiornata direttamente dal flusso quando `REFRESH` viene eseguito. La vista materializzata viene mappata all'origine dati del flusso. È possibile eseguire filtri e aggregazioni sui dati del flusso come parte della definizione della vista materializzata. La vista materializzata dell'importazione dati in streaming (la vista materializzata di *base*) può fare riferimento a un solo flusso, ma è possibile creare viste materializzate aggiuntive che si uniscono alla vista materializzata di base e con altre viste materializzate o tabelle. 

**Nota**  
*Importazione di dati in streaming e Amazon Redshift Serverless*: la procedura di configurazione descritta in questo argomento si applica sia ai cluster con provisioning di Amazon Redshift che ad Amazon Redshift Serverless. Per ulteriori informazioni, consulta [Comportamento dell’importazione in streaming e tipi di dati](materialized-view-streaming-ingestion.md#materialized-view-streaming-ingestion-limitations).

Supponendo che tu disponga di un flusso Kinesis Data Streams disponibile, il primo passo è definire uno schema in Amazon Redshift con `CREATE EXTERNAL SCHEMA` e fare riferimento a una risorsa Kinesis Data Streams. Successivamente, per accedere ai dati nel flusso, definisci `STREAM` in una vista materializzata. È possibile archiviare i record di flusso in formato `SUPER` semi-strutturato o definire uno schema che comporta la conversione dei dati in tipi di dati Redshift. Quando si esegue una query sulla vista materializzata, i record restituiti sono una point-in-time visualizzazione dello stream. 

1. Crea un ruolo IAM con una policy di attendibilità che consenta al cluster di Amazon Redshift o al gruppo di lavoro Amazon Redshift serverless di assumere tale ruolo. Per informazioni su come configurare la policy di fiducia per il ruolo IAM, consulta [Autorizzazione di Amazon Redshift ad accedere ad AWS altri servizi per tuo conto](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html). Una volta creato, il ruolo dovrebbe avere la seguente policy IAM, che fornisce l'autorizzazione per la comunicazione con il flusso di dati Amazon Kinesis. 

   **Policy IAM per un flusso non crittografato da Flusso di dati Kinesis**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadStream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStreamSummary",
                   "kinesis:GetShardIterator",
                   "kinesis:GetRecords",
                   "kinesis:ListShards",
                   "kinesis:DescribeStream"
               ],
               "Resource": "arn:aws:kinesis:*:111122223333:stream/*"
           },
           {
               "Sid": "ListStream",
               "Effect": "Allow",
               "Action": "kinesis:ListStreams",
               "Resource": "*"
           }
       ]
   }
   ```

------

   **Policy IAM per un flusso crittografato da Flusso di dati Kinesis**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ReadStream",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStreamSummary",
                   "kinesis:GetShardIterator",
                   "kinesis:GetRecords",
                   "kinesis:ListShards",
                   "kinesis:DescribeStream"
               ],
               "Resource": "arn:aws:kinesis:*:111122223333:stream/*"
           },
           {
               "Sid": "DecryptStream",
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
           },
           {
               "Sid": "ListStream",
               "Effect": "Allow",
               "Action": "kinesis:ListStreams",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Controlla il tuo VPC e verifica che il cluster Amazon Redshift o Amazon Redshift serverless disponga di un percorso per raggiungere gli endpoint di flusso di dati Kinesis su Internet utilizzando un gateway NAT o Internet. Se desideri che il traffico tra Redshift e Kinesis Data Streams rimanga all'interno della rete, prendi in considerazione AWS l'utilizzo di un endpoint VPC con interfaccia Kinesis. Per ulteriori informazioni, consulta [Utilizzo di Amazon Kinesis Data Streams con endpoint VPC di interfaccia](https://docs.aws.amazon.com/streams/latest/dev/vpc.html).

1. In Amazon Redshift, crea uno schema esterno per mappare i dati da Kinesis a uno schema.

   ```
   CREATE EXTERNAL SCHEMA kds
   FROM KINESIS
   IAM_ROLE { default | 'iam-role-arn' };
   ```

    L'importazione di dati in streaming per il flusso di dati Amazon Kinesis non richiede un tipo di autenticazione. Utilizza il ruolo IAM definito nell'istruzione `CREATE EXTERNAL SCHEMA` per effettuare richieste al flusso di dati Amazon Kinesis. 

    Facoltativo: utilizza la parola chiave REGION per specificare la regione in cui Amazon Kinesis Data Streams risiede lo stream MSK o Amazon. 

   ```
   CREATE EXTERNAL SCHEMA kds
   FROM KINESIS
   REGION 'us-west-2'
   IAM_ROLE { default | 'iam-role-arn' };
   ```

   In questo esempio, la regione specifica la posizione del flusso di origine. IAM\$1ROLE è un esempio.

1. Crea una vista materializzata per consumare i dati del flusso. Con un’istruzione come la seguente, se un record non può essere analizzato, si verifica un errore. Utilizza un comando come questo se non desideri che i record di errore vengano ignorati.

   ```
   CREATE MATERIALIZED VIEW my_view AUTO REFRESH YES AS
   SELECT *
   FROM kds.my_stream_name;
   ```

   I nomi del flusso di dati Kinesis fanno distinzione tra maiuscole e minuscole e possono contenere lettere maiuscole e minuscole. Per importare dai flussi con nomi in maiuscolo, puoi impostare la configurazione `enable_case_sensitive_identifier` su `true` a livello di database. Per ulteriori informazioni, consulta [Nomi e identificatori](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) e [enable\$1case\$1sensitive\$1identifier](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html).

   Per attivare l'aggiornamento automatico, usa `AUTO REFRESH YES`. Il comportamento predefinito prevede l'aggiornamento manuale. Tieni presente che, quando utilizzi CAN\$1JSON\$1PARSE, è possibile che i record che non possono essere analizzati vengano ignorati.

   Le colonne di metadati includono quanto segue:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started.html)

   È importante notare che, se la definizione di vista materializzata include una logica aziendale, in alcuni casi gli errori di logica aziendale possono causare il blocco dell’importazione in streaming. Ciò potrebbe comportare la necessità di rimuovere e ricreare la vista materializzata. Per evitare ciò, consigliamo di mantenere la logica il più semplice possibile ed eseguire la maggior parte dei controlli della logica aziendale sui dati dopo l’importazione.

1. Aggiorna la vista per richiamare Redshift ed eseguire la lettura dal flusso e il caricamento dei dati nella vista materializzata.

   ```
   REFRESH MATERIALIZED VIEW my_view;
   ```

1. Esegui una query sui dati nella vista materializzata.

   ```
   select * from my_view;
   ```

# Nozioni di base sull’importazione in streaming da origini Apache Kafka
<a name="materialized-view-streaming-ingestion-getting-started-MSK"></a>

In questo argomento viene descritto come utilizzare i dati in streaming di Amazon MSK, Apache Kafka o Confluent Cloud usando una vista materializzata.

 Lo scopo dell'importazione dati in streaming di Amazon Redshift è semplificare il processo di importazione diretta di dati di flusso da un servizio di streaming in Amazon Redshift o in Amazon Redshift serverless. È compatibile con Amazon MSK con provisioning e Amazon MSK serverless, con Apache Kafka open source e con Confluent Cloud. L’importazione in streaming di Amazon Redshift elimina la necessità di gestire un argomento Apache Kafka in Amazon S3 prima di importare i dati di flusso in Redshift.

 A livello tecnico, l’importazione in streaming fornisce l’importazione a bassa latenza e ad alta velocità dei dati del flusso o dell’argomento in una vista materializzata di Amazon Redshift. Dopo la configurazione, utilizzando l'aggiornamento della vista materializzata è possibile acquisire grandi volumi di dati. 

Devi disporre di un’origine Apache Kafka prima di configurare l’importazione in streaming di Amazon Redshift. Se non disponi di un’origine, creane una utilizzando le istruzioni seguenti:
+ **Amazon MSK**: [Nozioni di base sull’utilizzo di Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html)
+ **Apache Kafka**: [Guida introduttiva di Apache Kafka](https://kafka.apache.org/quickstart)
+ **Confluent Cloud**: [Guida introduttiva di Confluent Cloud](https://docs.confluent.io/cloud/current/get-started/index.html)

## Configurazione dell’importazione in streaming da Kafka
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup"></a>

Utilizza le seguenti procedure per configurare l'importazione di streaming su Amazon Redshift da Amazon MSK o da fonti Apache Kafka non gestite (Apache Kafka e AWS Confluent Cloud).

**Topics**
+ [Configurare l’autenticazione](#materialized-view-streaming-ingestion-getting-started-MSK-setup-auth)
+ [Configurazione del VPC](#materialized-view-streaming-ingestion-getting-started-MSK-Setup-VPC)
+ [Creare una vista materializzata](#materialized-view-streaming-ingestion-getting-started-MSK-setup-materialized-view)

### Configurare l’autenticazione
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup-auth"></a>

In questa sezione viene descritta la configurazione dell’autenticazione per consentire all’applicazione Amazon Redshift di accedere a un’origine Amazon MSK. 

Dopo avere creato il ruolo dell’applicazione, collega una delle seguenti policy per consentire l’accesso al cluster Amazon MSK, Apache Kafka o Confluent Cloud. Per l’autenticazione mTLS puoi archiviare i certificati utilizzati da Amazon Redshift in ACM o Secrets Manager, quindi devi scegliere la policy che corrisponde al luogo in cui è archiviato il certificato. 

Tieni presente che i certificati autofirmati non sono supportati per l’autenticazione o i dati in transito quando utilizzi l’importazione in streaming diretta in Amazon Redshift con una delle origini di streaming Apache Kafka supportate. Sono inclusi Amazon MSK, Apache Kafka e Confluent Cloud. Prendi in considerazione l'utilizzo di certificati generati con o con qualsiasi altra autorità di certificazione pubblicamente attendibile. AWS Certificate Manager 

L’autenticazione IAM di Amazon Redshift con MSK è supportata solo in Kafka 2.7.1 o versione successiva.

**AUTHENTICATION IAM (solo Amazon MSK):**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MSKIAMpolicy",
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:ReadData",
                "kafka-cluster:DescribeTopic",
                "kafka-cluster:Connect"
            ],
            "Resource": [
                "arn:aws:kafka:*:111122223333:cluster/MyTestCluster/*",
                "arn:aws:kafka:*:111122223333:topic/MyTestCluster/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:*:111122223333:group/MyTestCluster/*"
            ]
        }
    ]
}
```

------

**AUTENTICAZIONE MTLS: utilizzo di un certificato memorizzato in AWS Certificate Manager**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MSKmTLSACMpolicy",
            "Effect": "Allow",
            "Action": [
                "acm:ExportCertificate" 
            ],
            "Resource": [
                "arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID"
            ]
        }
    ]
}
```

------

**AUTENTICAZIONE MTLS: utilizzo di un certificato memorizzato in Gestione dei segreti AWS**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "MSKmTLSSecretsManagerpolicy",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue" 
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:444455556666:secret:secret_ID"
            ]
        }
    ]
}
```

------

------
#### [ Amazon MSK ]

Se utilizzi AUTHENTICATION NONE per connetterti a un’origine Amazon MSK, non è richiesto alcun ruolo IAM. Tuttavia, se utilizzi AUTHENTICATION IAM o MTLS per l’autenticazione con il cluster Amazon MSK, il cluster Amazon Redshift o il namespace Amazon Redshift serverless devono avere un ruolo IAM collegato con le autorizzazioni appropriate. Crea un ruolo IAM con una policy di attendibilità che consente al cluster Amazon Redshift o al namespace Amazon Redshift serverless di assumere il ruolo. Dopo avere creato il ruolo, aggiungi una delle autorizzazioni seguenti per supportare IAM o MTLS. Per l'autenticazione MTLS, i certificati utilizzati da Amazon Redshift possono essere archiviati AWS Certificate Manager in Gestione dei segreti AWS oppure, è necessario scegliere la politica che corrisponde al luogo in cui è archiviato il certificato. Collega il ruolo al cluster con provisioning Amazon Redshift o al namespace Redshift serverless. Per informazioni su come configurare la policy di fiducia per il ruolo IAM, consulta [Autorizzazione di Amazon Redshift ad accedere ad AWS altri servizi per tuo conto](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html). 

La tabella seguente mostra le opzioni di configurazione aggiuntive da impostare per l'acquisizione di streaming da Amazon MSK:


| Configurazione di Amazon Redshift | Configurazione di Amazon MQ | Porta da aprire tra Redshift e Amazon MSK | 
| --- | --- | --- | 
|  AUTHENTICATION NONE  |  Trasporto TLS disabilitato  | 9092 | 
|  AUTHENTICATION NONE  |  Trasporto TLS abilitato  | 9094 | 
|  AUTHENTICATION IAM  |  IAM  | 9098/9198 | 
|  AUTHENTICATION MTLS  |  Trasporto TLS abilitato  | 9094 | 

L'autenticazione Amazon Redshift è impostata nell'istruzione CREATE EXTERNAL SCHEMA.

**Nota**  
Nel caso in cui il cluster Amazon MSK ha l'autenticazione Mutual Transport Layer Security (mTLS) abilitata, la configurazione di Amazon Redshift per l'utilizzo di AUTHENTICATION NONE indica ad Amazon Redshift di utilizzare la porta 9094 per l'accesso non autenticato. Tuttavia, poiché la porta viene utilizzata dall'autenticazione mTLS, questa operazione avrà esito negativo. Per questo motivo consigliamo di passare ad AUTHENTICATION MTLS quando utilizzi mTLS.

------
#### [ Apache Kafka or Confluent Cloud ]

Per Apache Kafka e Confluent Cloud, Amazon Redshift supporta i seguenti protocolli di connessione:
+ Puoi utilizzare mTLS o testo semplice con il trasporto TLS per l’autenticazione quando ti connetti ad Apache Kafka.
+ Puoi utilizzare mTLS per l’autenticazione solo quando ti connetti a Confluent Cloud.

Amazon Redshift supporta i seguenti protocolli di crittografia per la connessione ad Apache Kafka o Confluent Cloud:

**Metodi di autenticazione supportati per Apache Kafka e Confluent Cloud**


| Amazon Redshift | Protocollo di sicurezza Kafka | Supporto di Apache Kafka | Supporto di Confluent Cloud | 
| --- | --- | --- | --- | 
| AUTHENTICATION NONE | PLAINTEXT | No | No | 
| AUTHENTICATION NONE | SSL | Sì | No | 
| AUTHENTICATION IAM | SASL\$1SSL | No | No | 
| AUTHENTICATION MTLS | SSL | Sì (con certificato) | Sì (con certificato) | 

Tieni presente che Amazon Redshift non supporta SASL/SCRAM SASL/PLAINTEXT.

------

### Configurazione del VPC
<a name="materialized-view-streaming-ingestion-getting-started-MSK-Setup-VPC"></a>

Dopo avere creato le risorse di autenticazione, controlla il VPC e verifica che il cluster Amazon Redshift o il gruppo di lavoro Amazon Redshift serverless disponga di un percorso per raggiungere l’origine Apache Kafka. 

**Nota**  
Per Amazon MSK, le regole in entrata del gruppo di sicurezza per il cluster Amazon MSK dovrebbero autorizzare il gruppo di sicurezza del cluster Amazon Redshift o del gruppo di lavoro Amazon Redshift serverless. Le porte specificate dipendono dai metodi di autenticazione utilizzati per il cluster Amazon MSK. Per ulteriori informazioni, consulta [Informazioni sulle porte](https://docs.aws.amazon.com/msk/latest/developerguide/port-info.html) e [Accesso dall'interno AWS ma dall'esterno del VPC](https://docs.aws.amazon.com/msk/latest/developerguide/aws-access.html).

Quindi abilita il routing VPC avanzato nel cluster Amazon Redshift o nel gruppo di lavoro Amazon Redshift serverless. Per ulteriori informazioni, consulta [Abilitazione del routing VPC avanzato](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-enabling-cluster.html).

### Creare una vista materializzata
<a name="materialized-view-streaming-ingestion-getting-started-MSK-setup-materialized-view"></a>

In questa sezione configuri la vista materializzata utilizzata da Amazon Redshift per accedere ai dati in streaming di Apache Kafka.

Supponendo che abbia a disposizione un cluster Apache Kafka, il primo passo consiste nel definire uno schema in Redshift con `CREATE EXTERNAL SCHEMA` e nel fare riferimento al cluster come origine dati. Quindi, definisci lo `STREAM` in una vista materializzata per accedere ai dati nell'argomento. Puoi archiviare i record dell’argomento utilizzando il tipo di dati VARBYTE di Amazon Redshift o definire uno scherma che converte i dati nel formato `SUPER` semistrutturato. Quando si esegue una query sulla vista materializzata, i record restituiti sono una point-in-time visualizzazione dell'argomento.

1. In Amazon Redshift crea uno schema esterno da mappare al cluster Apacke Kafka. La sintassi è la seguente:

   ```
   CREATE EXTERNAL SCHEMA MySchema
   FROM KAFKA
   [ IAM_ROLE [ default | 'iam-role-arn' ] ]
   AUTHENTICATION [ none | iam | mtls ]
   {AUTHENTICATION_ARN 'acm-certificate-arn' |  SECRET_ARN 'asm-secret-arn'};
   ```

   Nella clausola `FROM`, `KAFKA` indica che lo schema mappa i dati da un’origine Apache Kafka. 

    `AUTHENTICATION` indica il tipo di autenticazione definito per l’importazione in streaming. Sono disponibili tre tipi: 
   + **none**: specifica che non è richiesta alcuna autenticazione. Ciò corrisponde all’accesso non autenticato in MSK. Ciò corrisponde all’autenticazione SSL in Apache Kafka. Questo metodo di autenticazione non è supportato per Confluent Cloud.
   + **iam**: specifica l'autenticazione IAM. Puoi utilizzare l’autenticazione IAM solo con Amazon MSK. Quando scegli questa opzione, assicurati che il ruolo IAM disponga delle autorizzazioni per l'autenticazione IAM. Per ulteriori informazioni sulla configurazione delle policy IAM richieste, consulta [Configurazione dell’importazione in streaming da Kafka](#materialized-view-streaming-ingestion-getting-started-MSK-setup).
   + **mtls**: specifica che il protocollo Transport Layer Security (TLS) reciproco fornisce comunicazioni sicure facilitando l’autenticazione tra client e server. In questo caso il client è Redshift e il server è Apache Kafka. Per ulteriori informazioni sulla configurazione dell’importazione in streaming con mTLS, consulta [Autenticazione con mTLS per l’importazione in streaming Redshift da origini Apache Kafka](materialized-view-streaming-ingestion-mtls.md).

   Tieni presente che l’autenticazione Amazon MSK con un nome utente e una password non è supportata per l’importazione in streaming. 

   Il parametro `AUTHENTICATION_ARN` specifica l’ARN del certificato del protocollo Transport Layer Security reciproco (mTLS) ACM utilizzato per stabilire una connessione crittografata.

   Il `SECRET_ARN` parametro specifica l'arn del Gestione dei segreti AWS segreto contenente il certificato che deve essere utilizzato da Amazon Redshift per MTL.

   Negli esempi seguenti viene illustrato come impostare l’URI del broker per il cluster Amazon MSK quando crei lo schema esterno:

   **Utilizzo dell’autenticazione IAM:**

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION IAM
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9098'
   ```

   **Utilizzo di nessuna autenticazione:**

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA 
   AUTHENTICATION none
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9092'
   ```

   **Utilizzo di mTLS:**

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION MTLS
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b- 2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094'
   {AUTHENTICATION_ARN 'acm-certificate-arn' |  SECRET_ARN 'asm-secret-arn'}
   ```

   Per informazioni su come creare uno schema esterno, consulta [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

1. Crea una vista materializzata per consumare i dati dall'argomento. Utilizza un comando SQL come l’esempio seguente.

   ```
   CREATE MATERIALIZED VIEW MyView AUTO REFRESH YES AS
   SELECT *
   FROM MySchema."mytopic";
   ```

   I nomi degli argomenti Kafka distinguono tra maiuscole e minuscole e possono contenere lettere maiuscole e minuscole. Per importare da argomenti con nomi in maiuscolo, puoi impostare la configurazione `enable_case_sensitive_identifier` su `true` a livello di sessione o database. Per ulteriori informazioni, consulta [Nomi e identificatori](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) e [enable\$1case\$1sensitive\$1identifier](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html).

   Per attivare l'aggiornamento automatico, usa `AUTO REFRESH YES`. Il comportamento predefinito prevede l'aggiornamento manuale. 

1. Le colonne di metadati includono quanto segue:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)

   È importante notare che, se la definizione di vista materializzata include una logica aziendale che causa errori di logica aziendale, in alcuni casi ciò può comportare errori nell’importazione in streaming. Ciò potrebbe comportare la necessità di rimuovere e ricreare la vista materializzata. Per evitare ciò, consigliamo di mantenere la logica aziendale semplice ed eseguire una logica aggiuntiva sui dati dopo l’importazione.

1. Aggiorna la vista per invocare Amazon Redshift ed eseguire la lettura dall'argomento e il caricamento dei dati nella vista materializzata.

   ```
   REFRESH MATERIALIZED VIEW MyView;
   ```

1. Esegui una query sui dati nella vista materializzata.

   ```
   select * from MyView;
   ```

   La vista materializzata viene aggiornata direttamente dall'argomento quando si esegue il comando `REFRESH`. Viene creata una vista materializzata che corrisponde all'origine dati dell'argomento Kafka. È possibile eseguire filtri e aggregazioni sui dati nell'ambito della definizione della vista materializzata. La vista materializzata dell'importazione dati in streaming (vista materializzata di base) può fare riferimento a un solo argomento Kafka, ma è possibile creare viste materializzate aggiuntive che si uniscono alla vista materializzata di base e con altre viste materializzate o tabelle.

Per ulteriori informazioni sulle limitazioni relative all'importazione dati in streaming, consulta [Comportamento dell’importazione in streaming e tipi di dati](materialized-view-streaming-ingestion.md#materialized-view-streaming-ingestion-limitations).

# Autenticazione con mTLS per l’importazione in streaming Redshift da origini Apache Kafka
<a name="materialized-view-streaming-ingestion-mtls"></a>

mTLS consente a un server di autenticare il client a cui invia informazioni e al client di autenticare il server. Il vantaggio dell’utilizzo di mTLS consiste nel fornire un’autenticazione affidabile per una varietà di casi d’uso in diverse applicazioni verticali del settore. Tra questi figurano casi d’uso nei settori finanziario, retail, governativo e sanitario. In caso di importazione in streaming in Redshift, l’autenticazione avviene tra un server, che può essere Amazon MSK, Apache Kafka o Confluent Cloud, e un cluster con provisioning Amazon Redshift o un gruppo di lavoro Amazon Redshift serverless.

In questo argomento vengono illustrati le procedure e gli esempi di comandi SQL che mostrano come creare uno schema esterno che utilizza mTLS per l’autenticazione tra il client Redshift e qualsiasi server Apache Kafka. Le fasi illustrate in questo argomento completano la procedura per configurare l’importazione in streaming da origini Apache Kafka. Per ulteriori informazioni, consulta [Nozioni di base sull’importazione in streaming da origini Apache Kafka](materialized-view-streaming-ingestion-getting-started-MSK.md).

## Prerequisiti per l’utilizzo di mTLS per l’importazione in streaming
<a name="materialized-view-streaming-ingestion-mtls-prerequisites"></a>

In questa sezione vengono illustrate le fasi preliminari per l’utilizzo di mTLS per l’importazione in streaming con AWS Certificate Manager o Gestione dei segreti AWS.

Come fase preliminare, devi disporre o creare un'autorità di certificazione privata (PCA), che puoi utilizzare per emettere certificati che, tra le altre funzioni, consentono comunicazioni sicure attraverso canali di comunicazione sicuri. AWS Autorità di certificazione privata (CA privata) è un servizio disponibile che svolge questa funzione. Per ulteriori informazioni, consulta [Creazione di una CA privata](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) nella *Guida per l’utente di AWS Autorità di certificazione privata *. Dopo avere creato la CA privata, esporta il certificato CA root e salvalo in un file con estensione .pem. 

Per creare un cluster che utilizza il certificato CA, segui la procedura descritta:

------
#### [ Amazon MSK ]

1. Crea un cluster Amazon MSK che supporti l’autenticazione client mTLS. Per ulteriori informazioni sulla configurazione di un cluster Amazon MSK, consulta [Autenticazione client TLS reciproca per Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html#msk-authentication-cluster) nella *Guida per gli sviluppatori di Streaming gestito da Amazon per Apache Kafka*.

1. Modifica le impostazioni di sicurezza per il cluster Amazon MSK, attivando l'autenticazione client TLS tramite AWS Certificate Manager (ACM) e selezionando il AWS Private CA (PCA) creato in precedenza. Per ulteriori informazioni, consulta [Aggiornamento delle impostazioni di sicurezza di un cluster](https://docs.aws.amazon.com/msk/latest/developerguide/msk-update-security.html) nella *Guida per gli sviluppatori di Streaming gestito da Amazon per Apache Kafka*.

------
#### [ Confluent Cloud ]

1. Crea un cluster Confluent Cloud dedicato, preferibilmente nella stessa Regione AWS del cluster Amazon Redshift. Per informazioni sulla creazione di un cluster Confluent Cloud, consulta [Creare un cluster Kafka in Confluent Cloud](https://docs.confluent.io/cloud/current/get-started/index.html#step-1-create-a-ak-cluster-in-ccloud).

1. Carica il file pem del certificato CA AWS Private CA root esportato che hai creato in precedenza. Per ulteriori informazioni, consulta [Gestire l’autorità di certificazione per l’autenticazione mTLS per Confluent Cloud](https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/mtls/certificate-authority.html). Confluent Cloud utilizza questo certificato per verificare il certificato client Amazon Redshift. 

------

## Utilizzo di MTL per l'acquisizione di streaming con AWS Certificate Manager
<a name="materialized-view-streaming-ingestion-mtls-acm"></a>

Nella procedura seguente viene illustrato come configurare mTLS per l’importazione in streaming Redshift utilizzando AWS Certificate Manager (ACM) per l’archiviazione e la gestione dei certificati:

1. Richiedi un certificato privato tramite ACM. Quando esegui questa operazione, seleziona la PCA che hai creato nella sezione Prerequisiti come autorità di certificazione. ACM archivia il certificato firmato e la chiave privata collegata per comunicazioni sicure. Per informazioni sulla gestione dei certificati con ACM, consulta [Emissione e gestione di certificati](https://docs.aws.amazon.com/acm/latest/userguide/gs.html) nella *Guida per l’utente di AWS Certificate Manager *.

1. **Per il ruolo IAM che usi per gestire il tuo cluster Redshift o il gruppo di lavoro Amazon Redshift Serverless, allega l'autorizzazione per esportare il certificato, che è acm:. ExportCertificate** Per ulteriori informazioni sulla configurazione delle risorse IAM necessarie per l’importazione in streaming, consulta [Configurazione dell’importazione in streaming da Kafka](materialized-view-streaming-ingestion-getting-started-MSK.md#materialized-view-streaming-ingestion-getting-started-MSK-setup). Specifica lo stesso ruolo IAM nella fase successiva per creare lo schema esterno.
**Nota**  
Richieste per AWS Certificate Manager richiedere un gateway Internet (IGW) o un gateway NAT (NGW) nel tuo VPC. Se il VPC non dispone di un IGW o di un NGW, segui la procedura descritta:  
Usa Secrets Manager anziché ACM per archiviare i certificati.
Collega un endpoint VPC di Secrets Manager al VPC.
Per informazioni sull’utilizzo di Secrets Manager con mTLS per l’importazione in streaming, consulta [Utilizzo di MTL per l'acquisizione di streaming con Gestione dei segreti AWS](#materialized-view-streaming-ingestion-mtls-secrets-manager) di seguito.

1. Ottieni l’URI del broker bootstrap per il cluster Amazon MSK, Apache Kafka o Confluent Cloud. Per ulteriori informazioni su come ottenere l’URI del broker bootstrap per Amazon MSK, consulta [Ottenimento dei broker bootstrap per un cluster Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html) in *Guida per gli sviluppatori di Streaming gestito da Amazon per Apache Kafka*.

1.  Esegui un comando SQL come nell’esempio seguente per creare uno schema esterno che mappa il cluster a uno schema esterno Redshift, utilizzando `mtls`.

------
#### [ Amazon MSK ]

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094'
   AUTHENTICATION_ARN 'arn:aws:acm:Region:444455556666:certificate/certificate_ID';
   ```

------
#### [ Apache Kafka or Confluent Cloud ]

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'lkc-2v531.domz6wj0p.us-west-1.aws.confluent.cloud:9092'
   AUTHENTICATION_ARN 'arn:aws:acm:region:444455556666:certificate/certificate_ID';
   ```

------

   Parametri importanti:
   + IAM\$1ROLE: il ruolo IAM associato al cluster, per l’importazione in streaming.
   + URI: l’URI del broker bootstrap per il cluster. Tieni presente che, per Amazon MSK, la porta 9094 è specificata per la comunicazione con i broker per la crittografia TLS.
   + AUTHENTICATION\$1ARN: l’ARN del certificato ACM. L’ARN è disponibile nella console ACM quando scegli il certificato emesso.

Dopo avere completato questa procedura di configurazione, puoi creare una vista materializzata di Redshift che faccia riferimento allo schema definito nell’esempio e quindi utilizzare REFRESH MATERIALIZED VIEW per lo streaming dei dati. Per ulteriori informazioni, consulta [Nozioni di base sull’importazione in streaming da origini Apache Kafka](materialized-view-streaming-ingestion-getting-started-MSK.md).

## Utilizzo di MTL per l'acquisizione di streaming con Gestione dei segreti AWS
<a name="materialized-view-streaming-ingestion-mtls-secrets-manager"></a>

Puoi configurare mTLS per l’importazione in streaming di Redshift utilizzando Gestione dei segreti AWS per la gestione dei certificati se non desideri fare riferimento al certificato in AWS Certificate Manager. La procedura seguente descrive come configurare mTLS utilizzando Secrets Manager.

1. Crea una richiesta di firma del certificato e una chiave privata con lo strumento che preferisci. Quindi puoi utilizzare la richiesta di firma per generare un certificato firmato, utilizzando la stessa CA privata (PCA) AWS usata per generare il certificato per il cluster. *Per ulteriori informazioni sull'emissione di un certificato, consulta [IssueCertificate](https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html)la sezione API Reference.AWS Autorità di certificazione privata *

1. Estrai il certificato utilizzando AWS Autorità di certificazione privata. Per ulteriori informazioni, consulta [Recuperare un certificato privato](https://docs.aws.amazon.com/privateca/latest/userguide/PcaGetCert.html) nella *Guida per l’utente di AWS Autorità di certificazione privata *.

1. Archivia il certificato e la chiave privata generati nella fase precedente in Gestione dei segreti AWS. Scegli `Other type of secret` e utilizza il formato di testo semplice. Le coppie chiave-valore devono essere nel formato `{"certificate":"<cert value>","privateKey":"<pkey value>"}`, come nell’esempio seguente. Per ulteriori informazioni sulla creazione e la gestione di segreti in Gestione dei segreti AWS, consulta [Creare e gestire segreti con Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html) nella *Guida per l'Gestione dei segreti AWS utente*.

   ```
   {"certificate":"-----BEGIN CERTIFICATE-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi 
   H4hAX8/eE96qCcjkpfT84EdvHzp6fC+/WwM0oXlwUEWlvfMCXNaG5D8SqRq3qA==
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi 
   wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   -----END CERTIFICATE-----",
   "privateKey":"-----BEGIN PRIVATE KEY-----
   klhdslkfjahksgdfkgioeuyihbflahabhbdslv6akybeoiwv1hoaiusdhbahsbdi
   7OD4m1dBEs3Fj++hDMH9rYRp99RqtCOf0EWOUe139KOilOsW+cyhAoc9Ci2+Jo/k
   17u2N1iGILMQEZuCRtnJOkFYkw==
   -----END PRIVATE KEY-----"}
   ```

1. Collega la policy di autorizzazione per recuperare il segreto al ruolo IAM che utilizzi per gestire il cluster Amazon Redshift o il gruppo di lavoro Amazon Redshift serverless. Questa autorizzazione è `secretsmanager:GetSecretValue`. Per ulteriori informazioni, consulta [Configurare l’autenticazione](materialized-view-streaming-ingestion-getting-started-MSK.md#materialized-view-streaming-ingestion-getting-started-MSK-setup-auth). Per ulteriori informazioni sulla gestione delle policy IAM, consulta [Modificare le policy IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html). Specifica lo stesso ruolo IAM nella fase successiva per creare lo schema esterno.

1. In Redshift esegui il comando SQL per creare lo schema esterno. Utilizzi il tipo di AUTENTICAZIONE `mtls`. Inoltre puoi specificare l’URI del cluster e l’ARN del segreto in Gestione dei segreti AWS.

   ```
   CREATE EXTERNAL SCHEMA my_schema
   FROM KAFKA
   IAM_ROLE 'arn:aws:iam::012345678901:role/my_role'
   AUTHENTICATION mtls
   URI 'b-1.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094,b-2.myTestCluster.123z8u.c2.kafka.us-west-1.amazonaws.com:9094'
   SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
   ```

Parametri importanti:
+ IAM\$1ROLE: il ruolo IAM associato al cluster, per l’importazione in streaming.
+ URI: l’URI del broker bootstrap per il cluster. Tieni presente che, per Amazon MSK, la porta 9094 è specificata per la comunicazione con i broker per la crittografia TLS.
+ SECRET\$1ARN: l’ARN del segreto di Secrets Manager, contenente il certificato da utilizzare per mTLS.

## Abilitazione dell’autenticazione mTLS per uno schema esterno esistente
<a name="materialized-view-streaming-ingestion-mtls-alter"></a>

Se disponi di uno schema esterno esistente che utilizzi per l’importazione in streaming e desideri implementare mTLS per l’autenticazione, puoi eseguire un comando come il seguente, che specifica l’autenticazione mTLS e l’ARN del certificato ACM in ACM.

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:Region:444455556666:certificate/certificate_ID';
```

In alternativa puoi specificare l’autenticazione mTLS, con riferimento all’ARN del segreto in Gestione dei segreti AWS.

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

Per informazioni sul comando ALTER EXTERNAL SCHEMA, consulta [ALTER EXTERNAL SCHEMA](r_ALTER_EXTERNAL_SCHEMA.md).

# Importazione di dati in streaming con Kinesis
<a name="materialized-view-streaming-ingestion-example-station-data"></a>

Questa procedura illustra come acquisire dati da un flusso Kinesis denominato *ev\$1station\$1data*, che contiene dati di consumo provenienti da diverse stazioni di ricarica per veicoli elettrici, in formato JSON. Lo schema è ben definito. L'esempio mostra come archiviare i dati come JSON grezzi e come convertire i dati JSON in tipi di dati Amazon Redshift man mano che vengono importati.

**Configurazione del produttore**

1. Utilizzando Amazon Kinesis Data Streams, segui la procedura per creare un flusso denominato `ev_station_data`. Scegli **On-demand** (On demand) per **Capacity mode** (Modalità capacità). Per ulteriori informazioni, consulta [Creazione di uno stream tramite la console di AWS gestione](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-create-a-stream.html).

1. [Amazon Kinesis Data Generator](https://awslabs.github.io/amazon-kinesis-data-generator/web/producer.html?) può aiutarti a generare dati di test da utilizzare con il tuo flusso. Segui i passaggi descritti nello strumento per iniziare e utilizza il seguente modello di dati per la generazione dei dati:

   ```
   {
       
      "_id" : "{{random.uuid}}",
      "clusterID": "{{random.number(
           {   "min":1,
               "max":50
           }
       )}}", 
       "connectionTime": "{{date.now("YYYY-MM-DD HH:mm:ss")}}",
       "kWhDelivered": "{{commerce.price}}",
       "stationID": "{{random.number(
           {   "min":1,
               "max":467
           }
       )}}",
         "spaceID": "{{random.word}}-{{random.number(
           {   "min":1,
               "max":20
           }
       )}}",
    
      "timezone": "America/Los_Angeles",
      "userID": "{{random.number(
           {   "min":1000,
               "max":500000
           }
       )}}"
   }
   ```

    Ogni oggetto JSON nei dati di flusso ha le seguenti proprietà: 

   ```
   {
       "_id": "12084f2f-fc41-41fb-a218-8cc1ac6146eb",
       "clusterID": "49",
       "connectionTime": "2022-01-31 13:17:15",
       "kWhDelivered": "74.00",
       "stationID": "421",
       "spaceID": "technologies-2",
       "timezone": "America/Los_Angeles",
       "userID": "482329"
   }
   ```

**Configurazione di Amazon Redshift**

In questa procedura viene illustrato come configurare la vista materializzata per l'importazione dati.

1. Crea uno schema esterno per mappare i dati da Kinesis a un oggetto Redshift.

   ```
   CREATE EXTERNAL SCHEMA evdata FROM KINESIS
   IAM_ROLE 'arn:aws:iam::0123456789:role/redshift-streaming-role';
   ```

   Per informazioni su come configurare il ruolo IAM, consulta [Nozioni di base sull'importazione dati in streaming da Amazon Kinesis Data Streams](materialized-view-streaming-ingestion-getting-started.md).

1. Crea una vista materializzata per consumare i dati del flusso. L’esempio seguente mostra come definire una vista materializzata per importare i dati in formato JSON da un flusso Kinesis.

   Innanzitutto, archivia i record di flusso in formato SUPER semi-strutturato. In questo esempio, l'origine JSON viene archiviata in Redshift senza convertirsi in tipi Redshift.

   ```
   CREATE MATERIALIZED VIEW ev_station_data AS
       SELECT approximate_arrival_timestamp,
       partition_key,
       shard_id,
       sequence_number,
       case when can_json_parse(kinesis_data) then json_parse(kinesis_data) else null end as payload,
       case when not can_json_parse(kinesis_data) then kinesis_data else null end as failed_payload
       FROM evdata."ev_station_data" ;
   ```

**Esecuzione di una query sul flusso**

1. Abilita gli attributi SUPER con distinzione tra maiuscole e minuscole utilizzando il comando seguente. Amazon Redshift non fa distinzione tra maiuscole e minuscole per impostazione predefinita. Pertanto, per accedere agli attributi SUPER con distinzione tra maiuscole e minuscole, devi abilitare questa funzionalità.

   ```
   SET enable_case_sensitive_super_attribute to TRUE;
   ```

1. Aggiorna la vista materializzata con il seguente comando per estrarre i dati dal flusso.

   ```
   REFRESH MATERIALIZED VIEW ev_station_data;
   ```

1. Esegui una query sulla vista materializzata aggiornata per ottenere statistiche di utilizzo.

   ```
   SELECT e.payload.connectionTime::date as connectiontime
   ,SUM(e.payload.kWhDelivered::decimal(10,2)) AS Energy_Consumed
   ,count(distinct e.payload.userID) AS #Users
   from ev_station_data as e
   group by connectiontime
   order by 1 desc;
   ```

1. Visualizza i risultati.

   ```
   connectiontime        energy_consumed    #users
   2022-02-08                 4139          10
   2022-02-09                 5571          10
   2022-02-10                 8697          20
   2022-02-11                 4408          10
   2022-02-12                 4257          10
   2022-02-23                 6861          10
   ```