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

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 * 
    

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

  1. Eseguire una query sull'intera vista. Sono inclusi i record più recenti nella tabella di origine:

    ViewName
    
  2. Eseguire una query sulla parte materializzata della visualizzazione solo, indipendentemente dalla data dell'ultima materializzazione.

    materialized_view("ViewName")
    
  3. 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'uso hint.shufflekey=Iddi ):
    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=shuffledi ):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

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.

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