Aggiornamento di una vista materializzata - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Aggiornamento di una vista materializzata

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 unità di condivisione dati.

  • 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

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. L’esempio seguente mostra un messaggio informativo che viene visualizzato quando esegui REFRESH MATERIALIZED VIEW per una vista materializzata che dipende da una vista materializzata obsoleta.

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

Amazon Redshift non supporta l’aggiornamento a cascata per le viste materializzate basate su origini diverse da:

  • Tabelle locali

  • Viste materializzate locali

  • Viste materializzate in streaming

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_CONT, LISTAGG, STDDEV_SAMP, STDDEV_POP, 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 Spectrum.

Aggiornamento automatico di una vista materializzata

Amazon Redshift può aggiornare automaticamente le viste materializzate con dati aggiornati dalle 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 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. È possibile abilitare l'aggiornamento automatico per una vista materializzata corrente utilizzando ALTER MATERIALIZED VIEW.

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.

  • Amazon Redshift è supportato per le viste materializzate definite per le tabelle di condivisione dati e le tabelle Iceberg.

  • Per lo stato di aggiornamento, è possibile controllare SVL_MV_REFRESH_STATUS, 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.