Viste materializzate
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati
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.
- Prendere in considerazione l'uso dei 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 riportate in Monitorare le visualizzazioni materializzate.
Perché usare viste materializzate?
Investendo risorse (archiviazione dei dati, cicli della 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 prestazioni migliori rispetto all'esecuzione di query sulla tabella di origine per le stesse funzioni di aggregazione.
Aggiornamento: 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 rispetto all'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 delle viste materializzate.
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 per ogni 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 viste materializzate su come risolvere tali situazioni.
Query di viste materializzate
Esistono due modi per eseguire 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 Query Optimizer della vista materializzata include possibili modi per migliorare le prestazioni delle query durante l'esecuzione di query sull'intera vista.
Eseguire una query solo nella 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 vista, 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 o ricerche con caratteri jolly.
- 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 record di viste materializzate:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- Gli esempi seguenti includono tutte le viste materializzate in base al nome
Le viste materializzate partecipano a query cross-Eventhouse 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("<serviceURL>").database('db').ViewName cluster("<serviceURL>").database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Gli esempi seguenti non includono record di viste materializzate:
cluster("<serviceURL>").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 delta
tempo di query. Ciò include l'aggregazione dell'oggetto delta
e il join 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 modello di query, nella
.create materialized-view
sezione Suggerimenti sulle prestazioni. - Query Optimizer sceglie strategie di riepilogo/join che dovrebbero migliorare le prestazioni delle query. Ad esempio, la decisione su se eseguire la sequenza casuale della query è basata sul numero di record in
delta
parte. Le proprietà della 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 sequenza casuale della query di visualizzazione materializzata e(facoltativamente) fornire chiavi specifiche per la sequenza casuale. Vedere gli esempi seguenti. |
ingestion_time()
funzione nel contesto delle viste materializzate
ingestion_time() funzione restituisce valori Null, se usati nel contesto di una vista materializzata, se si esegue una query sull'intera vista. Quando si esegue una query sulla parte materializzata della vista, il valore restituito dipende dal tipo di vista materializzata:
- Nelle viste materializzate che includono una singola
arg_max()
/arg_min()
take_any()
/aggregazione, l'oggettoingestion_time()
ingestion_time()
è uguale al del record corrispondente nella tabella di origine. - In tutte le altre viste materializzate, il valore di
ingestion_time()
è approssimativamente il tempo di materializzazione (vedere come funzionano le viste materializzate).
Esempi
Eseguire una query sull'intera vista. Sono inclusi i record più recenti nella tabella di origine:
ViewName
Eseguire una query solo sulla parte materializzata della vista, indipendentemente dal momento in cui è stata materializzata per l'ultima volta.
materialized_view("ViewName")
Eseguire una query sull'intera vista e fornire un "hint" per l'uso
shuffle
della strategia. Sono inclusi i record più recenti nella tabella di origine:- Esempio 1: eseguire lo shuffle in base alla
Id
colonna (in modo analogo all'uso dihint.shufflekey=Id
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Esempio 2: shuffle basato su tutte le chiavi (in modo analogo all'uso di
hint.strategy=shuffle
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Esempio 1: eseguire lo shuffle in base alla
Considerazioni sulle prestazioni
I principali collaboratori che possono influire sull'integrità di una visualizzazione materializzata sono:
- Risorse cluster: come qualsiasi altro processo in esecuzione nel cluster, le viste materializzate usano risorse (CPU, memoria) dal cluster. Se il cluster è in 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 viste materializzate come parte delle regole di scalabilità automatica.
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 sarà l'intersezione tra i nuovi record e i record già materializzati, mentre le prestazioni della vista materializzata saranno peggiori. 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 funzionare correttamente.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. Le percentuali di inserimento più elevate possono comunque risultare buone. Le prestazioni dipendono dalle dimensioni del database, 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 esistono 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 molti oggetti definiti. 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 contemporaneamente visualizzazioni più materializzate.
- 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 su 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.