Viste materializzate
Le viste materializzate espongono una query di aggregazione su una tabella di origine o su un'altra vista materializzata.
Le viste materializzate restituiscono sempre un risultato aggiornato della query di aggregazione (sempre aggiornata). L'esecuzione di query su una vista materializzata è più efficiente rispetto all'esecuzione dell'aggregazione direttamente sulla tabella di origine.
Nota
- Per decidere se le visualizzazioni materializzate sono adatte, esaminare i casi d'uso delle viste materializzate.
- Le viste materializzate presentano alcune limitazioni. Prima di usare la funzionalità, esaminare le considerazioni sulle prestazioni.
- È consigliabile usare i criteri di aggiornamento, se appropriato. Per altre informazioni, vedere Viste materializzate e criteri di aggiornamento.
- Monitorare l'integrità delle visualizzazioni materializzate in base alle raccomandazioni in Monitorare le visualizzazioni materializzate.
Perché usare viste materializzate?
Investendo risorse (archiviazione dei dati, cicli cpu in background) per le visualizzazioni materializzate delle aggregazioni di uso comune, si ottengono i vantaggi seguenti:
Miglioramento delle prestazioni: L'esecuzione di query su una vista materializzata offre in genere prestazioni migliori rispetto all'esecuzione di query sulla tabella di origine per le stesse funzioni di aggregazione.
Freschezza: Una query di visualizzazione materializzata restituisce sempre i risultati più aggiornati, indipendentemente dal momento in cui è stata eseguita l'ultima materializzazione. La query combina la parte materializzata della vista con i record nella tabella di origine, che non sono ancora stati materializzati (la
delta
parte), fornendo sempre i risultati più aggiornati.Riduzione dei costi:l'esecuzione di query su una vista materializzata utilizza meno risorse dal cluster rispetto all'esecuzione dell'aggregazione sulla tabella di origine. I criteri di conservazione della tabella di origine possono essere ridotti se è necessaria solo l'aggregazione. Questa configurazione riduce i costi della cache ad accesso frequente per la tabella di origine.
Per alcuni casi d'uso, vedere Casi d'uso della vista materializzata.
Funzionamento delle visualizzazioni materializzate
Una vista materializzata è costituita da due componenti:
- Parte materializzata : una tabella che contiene record aggregati dalla tabella di origine, che sono già stati elaborati. Questa tabella contiene sempre un singolo record in base alla combinazione di raggruppamento dell'aggregazione.
- Delta: i record appena inseriti nella tabella di origine che non sono ancora stati elaborati.
L'esecuzione di query sulla vista materializzata combina la parte materializzata con la parte delta, fornendo un risultato aggiornato della query di aggregazione. Il processo di materializzazione offline inserisce nuovi record dal delta alla tabella materializzata e aggiorna i record esistenti. Se l'intersezione tra il delta e la parte materializzata è grande e molti record richiedono aggiornamenti, questo potrebbe avere un impatto negativo sul processo di materializzazione. Vedere Monitorare le visualizzazioni materializzate su come risolvere tali situazioni.
Query di viste materializzate
Esistono due modi per eseguire una query su una vista materializzata:
Eseguire una query sull'intera vista: quando si esegue una query sulla vista materializzata in base al nome, analogamente all'esecuzione di query su una tabella, la query di visualizzazione materializzata combina la parte materializzata della vista con i record nella tabella di origine che non sono ancora stati materializzati (l'oggetto
delta
).- L'esecuzione di query sulla vista materializzata restituisce sempre i risultati più aggiornati, in base a tutti i record inseriti nella tabella di origine. Per altre informazioni sulle parti materializzate e non materializzate nella vista materializzata, vedere come funzionano le viste materializzate.
- Questa opzione potrebbe non risultare ottimale perché deve materializzare la parte durante il
delta
tempo di query. Le prestazioni in questo caso dipendono dall'età della visualizzazione e dai filtri applicati nella query. La sezione Materialized view Query Optimizer include possibili modi per migliorare le prestazioni delle query durante l'esecuzione di query sull'intera vista.
Eseguire una query solo sulla parte materializzata: un altro modo per eseguire query sulla vista consiste nell'usare la
materialized_view()
funzione . Questa opzione supporta l'esecuzione di query solo sulla parte materializzata della visualizzazione, specificando la latenza massima che l'utente è disposto a tollerare.- Questa opzione non garantisce la restituzione dei record più aggiornati, ma deve essere sempre più efficiente rispetto all'esecuzione di query sull'intera vista.
- Questa funzione è utile per gli scenari in cui si è disposti a sacrificare alcune novità per le prestazioni, ad esempio per i dashboard di telemetria.
Suggerimento
Le query sulla parte materializzata offrono sempre prestazioni migliori rispetto all'esecuzione di query sull'intera vista. Usare sempre la materialized_view()
funzione quando applicabile per il caso d'uso.
Le viste materializzate partecipano a query tra cluster o tra database, ma non sono incluse in unioni con caratteri jolly o ricerche.
- Gli esempi seguenti includono tutte le viste materializzate in base al nome
ViewName
:
cluster('cluster1').database('db').ViewName cluster('cluster1').database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Gli esempi seguenti non includono i record delle viste materializzate:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- Gli esempi seguenti includono tutte le viste materializzate in base al nome
Query Optimizer vista materializzata
Quando si esegue una query sull'intera vista, la parte materializzata viene combinata con l'oggetto durante il tempo di delta
query. Ciò include l'aggregazione di e l'unione delta
con la parte materializzata.
- L'esecuzione di query sull'intera vista offre prestazioni migliori se la query include filtri per il gruppo in base alle chiavi della query di visualizzazione materializzata. Vedere altri suggerimenti su come creare la vista materializzata, in base al
.create materialized-view
modello di query, nella sezione Suggerimenti sulle prestazioni. - Query Optimizer sceglie strategie di riepilogo/join che dovrebbero migliorare le prestazioni delle query. Ad esempio, la decisione relativa alla sequenza casuale della query è basata sul numero di record in
delta
parte. Le proprietà di richiesta client seguenti forniscono un controllo sulle ottimizzazioni applicate. È possibile testare queste proprietà con le query di visualizzazione materializzate e valutarne l'impatto sulle prestazioni delle query.
Nome della proprietà della richiesta client | Tipo | Descrizione |
---|---|---|
materialized_view_query_optimization_costbased_enabled |
bool |
Se impostato su false , disabilita le ottimizzazioni summarize/join nelle query di visualizzazione materializzate. Usa strategie predefinite. Il valore predefinito è true . |
materialized_view_shuffle |
dynamic |
Forzare la riproduzione casuale della query di visualizzazione materializzata e (facoltativamente) fornire chiavi specifiche per la sequenza casuale. Vedere gli esempi seguenti. |
Esempio
Eseguire una query sull'intera vista. Sono inclusi i record più recenti nella tabella di origine:
ViewName
Eseguire una query sulla parte materializzata della visualizzazione solo, indipendentemente dalla data dell'ultima materializzazione.
materialized_view("ViewName")
Eseguire una query sull'intera vista e fornire un "hint" per usare
shuffle
la strategia. Sono inclusi i record più recenti nella tabella di origine:- Esempio 1: shuffle in base alla
Id
colonna (in modo analogo all'usohint.shufflekey=Id
di ):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Esempio 2: eseguire lo shuffle in base a tutte le chiavi (in modo analogo all'uso
hint.strategy=shuffle
di ):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Esempio 1: shuffle in base alla
Considerazioni sulle prestazioni
I principali collaboratori che possono influire sull'integrità di una vista materializzata sono:
Risorse del cluster: Come qualsiasi altro processo in esecuzione nel cluster, le viste materializzate usano risorse (CPU, memoria) dal cluster. Se il cluster è sottoposto a overload, l'aggiunta di viste materializzate potrebbe causare una riduzione delle prestazioni del cluster. Monitorare l'integrità del cluster usando le metriche di integrità del cluster. La scalabilità automatica ottimizzata attualmente non prende in considerazione l'integrità delle visualizzazioni materializzate nell'ambito delle regole di scalabilità automatica.
- Il processo di materializzazione è limitato dalla quantità di memoria e dalla CPU che può utilizzare. Questi limiti sono definiti e possono essere modificati nel gruppo di carico di lavoro viste materializzate.
Sovrapposizione con i dati materializzati: Durante la materializzazione, tutti i nuovi record inseriti nella tabella di origine dall'ultima materializzazione (delta) vengono elaborati e materializzati nella vista. Maggiore è l'intersezione tra nuovi record e record già materializzati, il peggio sarà la performance della vista materializzata. Una vista materializzata funziona meglio se il numero di record da aggiornare (ad esempio, in
arg_max
vista) è un piccolo subset della tabella di origine. Se tutti o la maggior parte dei record di visualizzazione materializzati devono essere aggiornati in ogni ciclo di materializzazione, la vista materializzata potrebbe non riuscire.Frequenza di inserimento: Non esistono limiti hardcoded per il volume di dati o la frequenza di inserimento nella tabella di origine della vista materializzata. Tuttavia, la frequenza di inserimento consigliata per le viste materializzate non è superiore a 1-2 GB/sec. I tassi di inserimento più elevati possono comunque avere prestazioni elevate. Le prestazioni dipendono dalle dimensioni del cluster, dalle risorse disponibili e dalla quantità di intersezione con i dati esistenti.
Numero di viste materializzate nel cluster: Le considerazioni precedenti si applicano a ogni singola vista materializzata definita nel cluster. Ogni visualizzazione utilizza le proprie risorse e molte visualizzazioni si concorrono tra loro sulle risorse disponibili. Anche se non sono previsti limiti hardcoded al numero di viste materializzate in un cluster, il cluster potrebbe non essere in grado di gestire tutte le viste materializzate, quando sono presenti molte viste definite. I criteri di capacità possono essere modificati se nel cluster è presente più di una singola vista materializzata. Aumentare il valore di
ClusterMinimumConcurrentOperations
nei criteri per eseguire viste materializzate contemporaneamente.Definizione di vista materializzata: la definizione della vista materializzata deve essere definita in base alle procedure consigliate per le query per ottenere prestazioni ottimali delle query. Per altre informazioni, vedere Creare suggerimenti sulle prestazioni dei comandi.
Visualizzazione materializzata sulla vista materializzata
È possibile creare una vista materializzata su un'altra vista materializzata se la vista materializzata di origine è una visualizzazione di deduplicazione. In particolare, l'aggregazione della vista materializzata di origine deve essere take_any(*)
per deduplicare i record di origine. La seconda vista materializzata può usare qualsiasi funzione di aggregazione supportata. Per informazioni specifiche su come creare una vista materializzata su una vista materializzata, vedere .create materialized-view
il comando .
Suggerimento
Quando si esegue una query su una vista materializzata definita su un'altra vista materializzata, è consigliabile eseguire una query sulla parte materializzata solo usando la materialized_view()
funzione . L'esecuzione di query sull'intera vista non è efficiente quando entrambe le viste non sono completamente materializzate. Per altre informazioni, vedere Query sulle viste materializzate.
Contenuti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per