Condividi tramite


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

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. Tutti i dati necessari vengono elaborati, anche se arrivano in ritardo o non in ordine.
  • Sono spesso incrementali. Databricks tenterà 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 delle viste materializzate

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.

Annotazioni

Quando si crea una vista materializzata all'esterno di una pipeline, usando Databricks SQL, 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 create in Databricks SQL hanno un tipo di MV/ST.

Databricks usa Unity Catalog per archiviare i metadati relativi alla visualizzazione, inclusa la query e le visualizzazioni di sistema aggiuntive usate per gli aggiornamenti incrementali. I dati memorizzati nella cache vengono materializzati nell'archiviazione cloud.

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

Pitone

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 visualizzate tre righe aggiornate anziché l'intero report vendite.

Esempio di aggiornamento incrementale della vista materializzata

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.