Amazon Redshift non supporterà più la creazione di nuovi Python a UDFs partire dal 1° novembre 2025. Se vuoi usare Python UDFs, crea la UDFs data precedente a quella data. Python esistente UDFs continuerà a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
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à.
Aggiornamento di una vista materializzata
Questo argomento descrive come aggiornare i dati in una vista materiale dalle tabelle sottostanti.
Quando si crea una vista materializzata, il relativo contenuto riflette lo stato delle relazioni sottostanti del database (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 usi questa dichiarazione, Amazon Redshift identifica i cambiamenti avvenuti 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. Con 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 in base alla 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, è necessario utilizzare esplicitamente la CASCADE
parola chiave nell'aggiornamento più in alto della vista materializzata. Ad esempio, si supponga la seguente struttura di viste materializzate annidate:
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
REFRESH MATERIALIZED VIEW w CASCADE
comando. 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 CASCADE
parola chiave non viene utilizzata in modo esplicito, la vista materializzata verrà aggiornata in RESTRICT
modalità, aggiornando solo la vista materializzata corrente. Gli esempi seguenti mostrano un messaggio informativo quando si esegue una vista materializzata che REFRESH MATERIALIZED VIEW
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, la vista materializzata v viene aggiornata successivamente 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 fonti 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_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.
Sottointerrogazioni.
-
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 utilizzando formati diversi da quelli sopra elencati. Per ulteriori informazioni, consulta Visualizzazioni materializzate su tabelle di data lake esterne in Amazon Redshift Spectrum.
-
Aggiornamento automatico di una vista materializzata
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 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 su viste materializzate definite su tabelle di condivisione dati e 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.