Viste materializzate

Analogamente alle viste standard, le viste materializzate sono i risultati di una query e si accede allo stesso modo di una tabella. A differenza delle viste standard, che ricompilano i risultati in ogni query, le viste materializzate memorizzano nella cache i risultati e le aggiornano in base a un intervallo specificato. Poiché una vista materializzata è precomputata, le query su di essa possono essere eseguite molto più velocemente rispetto alle normali viste.

Per indicazioni su quando usare viste materializzate rispetto a tabelle o viste di streaming, vedere Che cosa sono le pipeline?.

Una vista materializzata è un oggetto pipeline dichiarativo. Include una query che lo definisce, un flusso per aggiornarlo e i risultati memorizzati nella cache per l'accesso rapido. Vista materializzata:

  • Tiene traccia delle modifiche nei dati upstream.
  • In caso di trigger, elabora in modo incrementale i dati modificati e applica le trasformazioni necessarie.
  • Gestisce la tabella di output, sincronizzata con i dati di origine, in base a un intervallo di aggiornamento specificato.

Le viste materializzate sono una buona scelta per molte trasformazioni:

  • Si applica il ragionamento sui risultati memorizzati nella cache anziché sulle righe. In effetti, è sufficiente scrivere una query.
  • Sono sempre corretti al momento dell'aggiornamento. Tutti i dati necessari vengono elaborati, anche se arrivano in ritardo o non in ordine.
  • Sono spesso incrementali. Databricks tenta di scegliere la strategia appropriata che riduce al minimo il costo dell'aggiornamento di una vista materializzata.

Funzionamento delle visualizzazioni materializzate

Il diagramma seguente illustra il funzionamento delle viste materializzate.

Diagramma che mostra il funzionamento di mvs

Le viste materializzate vengono definite e aggiornate da una singola pipeline. È possibile definire in modo esplicito le viste materializzate nel codice sorgente della pipeline. Le tabelle definite da una pipeline non possono essere modificate o aggiornate da altre pipeline.

Nota

Quando si crea una vista materializzata autonoma, all'esterno di Lakeflow Spark Declarative Pipelines, Azure Databricks crea una pipeline usata per aggiornare la vista. È possibile visualizzare la pipeline selezionando Processi & Pipeline nella barra di navigazione a sinistra nell'area di lavoro. È possibile aggiungere la colonna Tipo di pipeline alla vista. Le viste materializzate definite in una pipeline hanno un tipo di ETL. Le viste materializzate indipendenti hanno un tipo di MV/ST. Vedere Usare viste materializzate autonome.

Databricks usa Unity Catalog per archiviare i metadati relativi alla visualizzazione, incluse le query e le visualizzazioni di sistema aggiuntive per gli aggiornamenti incrementali. Databricks materializza i dati memorizzati nella cache nell'archiviazione cloud.

Nota

Databricks crea tabelle interne per supportare l'aggiornamento incrementale della vista materializzata. Queste tabelle vengono visualizzate in system.information_schema.tables ma non sono visibili in Esplora cataloghi o in altre aree dell'interfaccia utente dell'area di lavoro.

L'esempio seguente unisce due tabelle e mantiene aggiornato il risultato usando una vista materializzata.

Python

from pyspark import pipelines as dp

@dp.materialized_view
def regional_sales():
  partners_df = spark.read.table("partners")
  sales_df = spark.read.table("sales")

  return (
    partners_df.join(sales_df, on="partner_id", how="inner")
  )

SQL

CREATE OR REPLACE MATERIALIZED VIEW regional_sales
  AS SELECT *
  FROM partners
    INNER JOIN sales ON
      partners.partner_id = sales.partner_id;

Aggiornamenti incrementali automatici

Quando viene attivata la pipeline che definisce una vista materializzata, la vista viene mantenuta automaticamente aggiornata, spesso in modo incrementale. Databricks tenta di elaborare solo i dati che devono essere elaborati per mantenere aggiornata la visualizzazione materializzata. Una vista materializzata mostra sempre il risultato corretto, anche se richiede la ricompilazione completa del risultato della query da zero, ma spesso Databricks apporta solo aggiornamenti incrementali a una vista materializzata, che può essere molto meno costosa di una ricompilazione completa.

Il diagramma seguente mostra una vista materializzata denominata sales_report, che è il risultato dell'unione di due tabelle upstream denominate clean_customers e clean_transactionse il raggruppamento per paese. Un processo upstream inserisce 200 righe clean_customers in tre paesi (Stati Uniti, Paesi Bassi, Regno Unito) e aggiorna 5.000 righe in clean_transactions corrispondenti a questi nuovi clienti. La sales_report vista materializzata viene aggiornata in modo incrementale solo per i paesi che dispongono di nuovi clienti o transazioni corrispondenti. In questo esempio vengono aggiornate tre righe anziché l'intero report vendite.

Esempio di aggiornamento incrementale MV

Per altre informazioni sul funzionamento dell'aggiornamento incrementale nelle viste materializzate, vedere Aggiornamento incrementale per le viste materializzate.

Limitazioni delle visualizzazioni materializzate

Le viste materializzate presentano le limitazioni seguenti:

  • Poiché gli aggiornamenti creano query corrette, alcune modifiche agli input richiedono una ricompilazione completa di una vista materializzata, che può risultare costosa.
  • Non sono progettati per casi d'uso a bassa latenza. La latenza di aggiornamento di una vista materializzata è espressa in secondi o minuti, non in millisecondi.
  • Non tutti i calcoli possono essere calcolati in modo incrementale.
  • Azure Databricks tenta di rilevare quando una funzione definita dall'utente usata in una vista materializzata modifica il comportamento ed esegue un aggiornamento completo per applicare la funzione definita dall'utente aggiornata. Tuttavia, le funzioni definite dall'utente che chiamano altre funzioni o librerie possono modificare il comportamento in modi che Azure Databricks non è in grado di riconoscere. Un esempio è quando una libreria chiamata viene aggiornata. Quando il comportamento di una FDU cambia, spetta a te eseguire un aggiornamento completo su qualsiasi vista materializzata che la utilizza.
  • Le viste materializzate non supportano CLONE. Non è possibile usare una vista materializzata né come origine né come destinazione di un clone profondo o superficiale. Per altre informazioni, vedere Limitazioni.
  • Per visualizzare la pipeline che esegue il backup di una vista materializzata, un utente non amministratore deve disporre dei REFRESH privilegi per la vista materializzata oltre alle autorizzazioni per la pipeline. Vedere Chi può visualizzare una pipeline e il relativo output?

Risorse aggiuntive