Aggiornamento di una vista materializzata - Amazon Redshift

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

Quando crei una vista materializzata, il suo contenuto riflette lo stato della tabella o delle tabelle del database sottostante 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 si utilizza questa istruzione, Amazon Redshift identifica le modifiche apportate nella tabella o nelle tabelle di base e quindi 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 tabelle 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.

L'aggiornamento di una vista materializzata su una vista materializzata non è un processo a cascata. In altre parole, supponiamo di avere una vista materializzata A che dipende dalla vista materializzata B. In questo caso, quando viene richiamato REFRESH MATERIALIZED VIEW A, A viene aggiornato utilizzando la versione corrente di B, anche quando B lo è. out-of-date Perché A sia completamente aggiornata , prima di aggiornare A, aggiornare B in una transazione separata.

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.

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; 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)

L'esempio seguente mostra un messaggio informativo quando si esegue REFRESH MATERIALIZED VIEW su una vista materializzata che dipende da una vista materializzata. out-of-date

create table a(a int);
create materialized view b as select * from a;
create materialized view c as select * from b;
insert into a values (1);
refresh materialized view c; INFO: Materialized view c is already up to date. However, it depends on another materialized view that is not up to date.
REFRESH MATERIALIZED VIEW b; INFO: Materialized view b was incrementally updated successfully.
REFRESH MATERIALIZED VIEW c; INFO: Materialized view c was incrementally updated successfully.

Amazon Redshift presenta attualmente le seguenti limitazioni per l'aggiornamento incrementale delle viste materializzate.

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 nella traccia di anteprima per le viste materializzate definite utilizzando formati diversi dai precedenti. Per ulteriori informazioni sulla configurazione dei cluster di anteprima, consulta Creazione di un cluster di anteprima nella Guida alla gestione di Amazon Redshift. Per informazioni sulla configurazione dei gruppi di lavoro di anteprima, consulta Creazione di un gruppo di lavoro di anteprima nella Guida alla gestione di Amazon Redshift.

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 non aggiorna automaticamente le viste materializzate definite nelle tabelle esterne.

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