Condividi tramite


Utilizzare le viste materializzate in Databricks SQL

Questo articolo descrive come creare e aggiornare viste materializzate in Databricks SQL per migliorare le prestazioni e ridurre il costo dei carichi di lavoro di elaborazione e analisi dei dati.

Che cosa sono le viste materializzate?

In Databricks SQL, le viste materializzate sono tabelle gestite di Unity Catalog che archiviano fisicamente i risultati di una query. A differenza delle viste standard, che calcolano i risultati su richiesta, le viste materializzate memorizzano nella cache i risultati e le aggiornano man mano che cambiano le tabelle di origine sottostanti, in base a una pianificazione o automaticamente.

Le viste materializzate sono particolarmente adatte per i carichi di lavoro di elaborazione dei dati, ad esempio l'estrazione, la trasformazione e il caricamento (ETL). Le viste materializzate offrono un modo semplice e dichiarativo per elaborare i dati per la conformità, le correzioni, le aggregazioni o l'acquisizione generale dei dati delle modifiche (CDC). Le viste materializzate consentono anche trasformazioni facili da usare, pulendo, arricchendo e denormalizzando le tabelle di base. Pre-calcolando query costose o utilizzate di frequente, le viste materializzate riducono la latenza delle query e il consumo di risorse. In molti casi, possono calcolare in modo incrementale le modifiche dalle tabelle di origine, migliorando ulteriormente l'efficienza e l'esperienza dell'utente finale.

Di seguito sono riportati i casi d'uso comuni per le viste materializzate:

  • Mantenere aggiornato un cruscotto di Business Intelligence con una latenza minima delle query dell'utente finale.
  • Riduzione dell'orchestrazione ETL complessa con logica SQL semplice.
  • Creazione di trasformazioni complesse e a più livelli.
  • Tutti i casi d'uso che richiedono prestazioni coerenti con up-to-date insights.

Quando si crea una vista materializzata in un Databricks SQL warehouse, viene creata una pipeline serverless per elaborare la creazione e l'aggiornamento della vista materializzata. È possibile monitorare lo stato delle operazioni di aggiornamento in Esplora cataloghi. Vedere Visualizzare i dettagli della visualizzazione materializzata con DESCRIBE EXTENDED.

Requisiti

Le viste materializzate create in Databricks SQL sono supportate da una pipeline serverless. L'area di lavoro deve supportare le pipeline serverless per usare questa funzionalità.

Requisiti per creare o aggiornare viste materializzate:

  • È necessario utilizzare un SQL warehouse abilitato per il catalogo Unity, pro o serverless.

  • Per aggiornare una vista materializzata, è necessario trovarsi nell'area di lavoro che l'ha creata.

  • Per aggiornare in modo incrementale una vista materializzata dalle tabelle Delta, è necessario che nelle tabelle di origine sia abilitato il rilevamento delle righe.

  • Il proprietario (l'utente che crea la vista materializzata) deve disporre delle autorizzazioni seguenti:

    • Privilegio SELECT sulle tabelle di base a cui fa riferimento la vista materializzata.
    • Privilegi USE CATALOG e USE SCHEMA per il catalogo e lo schema contenenti le tabelle di origine per la vista materializzata.
    • Privilegi USE CATALOG e USE SCHEMA sul catalogo e sullo schema di destinazione per la vista materializzata.
    • Privilegi CREATE TABLE e CREATE MATERIALIZED VIEW sullo schema contenente la vista materializzata.
  • Per aggiornare una vista materializzata, è necessario disporre del REFRESH privilegio per la vista materializzata.

Requisiti per eseguire query sulle viste materializzate:

  • È necessario essere il proprietario della vista materializzata o avere SELECT nella vista materializzata, insieme ai relativi elementi padre USE SCHEMA e USE CATALOG.

  • È necessario usare una delle risorse di calcolo seguenti:

    • Magazzino SQL

    • Interfacce delle pipeline dichiarative di Lakeflow

    • Calcolo in modalità di accesso standard (in precedenza modalità di accesso condiviso)

    • Modalità di accesso dedicato (in precedenza modalità di accesso utente singolo) in Databricks Runtime 15.4 e versioni successive, purché l'area di lavoro sia abilitata per il calcolo serverless. Vedere Controllo di accesso con granularità fine in calcolo dedicato.

      Se si è il proprietario della vista materializzata, è possibile usare una risorsa di calcolo in modalità di accesso dedicata che esegue Databricks Runtime tra 14.3 e versioni successive.

Per informazioni su altre restrizioni sull'uso di viste materializzate, si veda Limitazioni.

Creare una vista materializzata

Le operazioni CREATE di visualizzazione materializzata di Databricks SQL utilizzano un warehouse di Databricks SQL per creare e caricare i dati nella visualizzazione materializzata. La creazione di una vista materializzata è un'operazione sincrona, il che significa che il comando CREATE MATERIALIZED VIEW si blocca fino a quando non viene creata la vista materializzata e il caricamento iniziale dei dati termina. Viene creata automaticamente una pipeline serverless per ogni vista SQL materializzata di Databricks. Quando la vista materializzata viene aggiornata , Lakeflow Declarative Pipelines elabora l'aggiornamento.

Per creare una vista materializzata, usare l'istruzione CREATE MATERIALIZED VIEW. Per inviare un'istruzione CREATE, usare l'editor SQL nell'interfaccia utente di Azure Databricks, l'interfaccia della riga di comando SQL di Databricks o l'API SQL di Databricks.

L'utente che crea una vista materializzata è il proprietario della visualizzazione materializzata.

L'esempio seguente crea la vista materializzata mv1 dalla tabella di base base_table1.

-- This query defines the materialized view:
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
  date,
  sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;

Quando si crea una vista materializzata usando l'istruzione CREATE OR REPLACE MATERIALIZED VIEW, l'aggiornamento dei dati iniziale e il popolamento iniziano immediatamente. Questo non utilizza il calcolo di SQL Warehouse. Al contrario, le pipeline dichiarative di Lakeflow serverless vengono usate per la creazione e gli aggiornamenti successivi.

I commenti delle colonne di una tabella di base vengono propagati automaticamente alla nuova vista materializzata solo al momento della creazione. Per aggiungere una pianificazione, vincoli di tabella o altre proprietà, modificare la definizione della vista materializzata (la query SQL).

La stessa istruzione SQL aggiornerà una vista materializzata se viene chiamata un'ora successiva o in base a una pianificazione. Un aggiornamento eseguito in questo modo funge da qualsiasi altro aggiornamento. Per informazioni dettagliate, vedere Aggiornare una vista materializzata.

Per altre informazioni sulla configurazione di una vista materializzata, vedere Configurare viste materializzate in Databricks SQL. Per informazioni sulla sintassi completa per la creazione di una vista materializzata, vedere CREATE MATERIALIZED VIEW. Per informazioni sul caricamento dei dati in formati diversi e da posizioni diverse, vedere Caricare dati con pipeline dichiarative di Lakeflow.

Caricare dati da sistemi esterni

Databricks consiglia di caricare dati esterni usando la Federazione Lakehouse per le origini dati supportate. Per informazioni sul caricamento di dati da origini non supportate dalla federazione lakehouse, si veda Opzioni di formato dati. Per informazioni generali sul caricamento dei dati, inclusi esempi, vedere Caricare dati con pipeline dichiarative di Lakeflow.

Nascondere i dati sensibili

Importante

Questa funzionalità è in Anteprima Pubblica.

È possibile usare viste materializzate per nascondere i dati sensibili agli utenti che accedono alla tabella. Un modo per eseguire questa operazione consiste nel creare la query in modo che non includa i dati al primo posto. Ma è anche possibile mascherare le colonne o filtrare le righe in base alle autorizzazioni dell'utente che esegue query. Ad esempio, è possibile nascondere la tax_id colonna per gli utenti che non si trovano nel gruppo HumanResourcesDept. A tale scopo, usare la sintassi ROW FILTER e MASK durante la creazione della vista materializzata. Per altre informazioni, vedere Filtrare i dati delle tabelle sensibili usando filtri di riga e maschere di colonna.

Aggiornare una vista materializzata

L'aggiornamento di una vista materializzata aggiorna la visualizzazione in modo da riflettere le modifiche più recenti alla tabella di base al momento dell'aggiornamento.

Quando si definisce una vista materializzata, l'istruzione CREATE OR REPLACE MATERIALIZED VIEW viene usata sia per creare la vista che per aggiornarla per eventuali aggiornamenti pianificati. È anche possibile usare l'istruzione REFRESH MATERIALIZED VIEW per aggiornare la vista materializzata senza dover fornire di nuovo la query. Vedere REFRESH (MATERIALIZED VIEW o STREAMING TABLE) per informazioni dettagliate sulla sintassi e sui parametri SQL per questo comando. Per altre informazioni sui tipi di viste materializzate che possono essere aggiornate in modo incrementale, vedere Aggiornamento incrementale per le viste materializzate.

Per inviare un'istruzione di aggiornamento, utilizzare l'editor SQL nell'interfaccia utente di Azure Databricks, un notebook collegato a un warehouse SQL, l’interfaccia utente della ria di comando Databricks SQL o l'API Databricks SQL.

Il proprietario e qualsiasi utente a cui è stato concesso il REFRESH privilegio sulla tabella può aggiornare la vista materializzata.

Nell'esempio seguente viene aggiornata la vista materializzata mv1:

REFRESH MATERIALIZED VIEW mv1;

L'operazione è sincrona per impostazione predefinita, ovvero il comando si blocca fino al completamento dell'operazione di aggiornamento. Per aggiornare in modo asincrono, è possibile aggiungere la ASYNC parola chiave :

REFRESH MATERIALIZED VIEW mv1 ASYNC;

Come vengono aggiornate le viste materializzate di Databricks SQL?

Le viste materializzate creano e usano automaticamente pipeline dichiarative di Lakeflow serverless per elaborare le operazioni di aggiornamento. Il rinfresco è gestito dalla pipeline e l'aggiornamento viene monitorato dal Databricks SQL Warehouse usato per creare la vista materializzata. Le viste materializzate possono essere aggiornate usando una pipeline eseguita a intervalli pianificati. Le viste materializzate create da Databricks SQL vengono sempre eseguite in modalità di attivazione automatica. Consultare Triggered vs. continuous pipeline mode (Modalità pipeline attivata e continua).

Le viste materializzate vengono aggiornate usando uno dei due metodi.

  • Aggiornamento incrementale : il sistema valuta la query della vista per identificare le modifiche apportate dopo l'ultimo aggiornamento e unisce solo i dati nuovi o modificati.
  • Aggiornamento completo : se non è possibile eseguire un aggiornamento incrementale, il sistema esegue l'intera query e sostituisce i dati esistenti nella vista materializzata con i nuovi risultati.

La struttura della query e il tipo di dati di origine determinano se è supportato l'aggiornamento incrementale. Per supportare l'aggiornamento incrementale, i dati di origine devono essere archiviati nelle tabelle Delta, con il rilevamento delle righe e il feed di dati delle modifiche abilitato. Dopo aver creato una vista materializzata, è possibile monitorarne il comportamento di aggiornamento per verificare se viene aggiornato in modo incrementale o tramite un aggiornamento completo.

Per informazioni dettagliate sui tipi di aggiornamento e su come ottimizzare gli aggiornamenti incrementali, vedere Aggiornamento incrementale per le viste materializzate.

Aggiornamenti asincroni

Per impostazione predefinita, le operazioni di aggiornamento vengono eseguite in modo sincrono. È anche possibile impostare un'operazione di aggiornamento in modo asincrono. Questo può essere impostato usando il comando refresh con la ASYNC parola chiave . Vedere REFRESH (MATERIALIZED VIEW o STREAMING TABLE) Il comportamento associato a ogni approccio è il seguente:

  • Sincrono: un aggiornamento sincrono impedisce ad altre operazioni di procedere fino al completamento dell'aggiornamento. Se il risultato è necessario per il passaggio successivo, ad esempio quando si sequenziano le operazioni di aggiornamento in strumenti di orchestrazione come Lakeflow Jobs, usare un aggiornamento sincrono. Per orchestrare le viste materializzate con un job, usare il tipo di operazione SQL. Consulta Attività di Lakeflow.
  • Asincrono: un aggiornamento asincrono avvia un processo in background nel calcolo delle pipeline dichiarative di Lakeflow all'inizio di un aggiornamento materializzato della vista, consentendo al comando di tornare prima del completamento del caricamento dei dati. Questo tipo di aggiornamento può risparmiare sui costi perché l'operazione non mantiene necessariamente la capacità di calcolo nel magazzino in cui viene avviato il comando. Se l'aggiornamento diventa inattivo e nessun'altra attività è in esecuzione, il warehouse può arrestarsi mentre l'aggiornamento usa altre risorse di calcolo disponibili. Inoltre, gli aggiornamenti asincroni supportano l'avvio di più operazioni in parallelo.

Pianificare il refresh delle viste materializzate.

È possibile configurare una vista materializzata di Databricks SQL per l'aggiornamento automatico in base a una pianificazione definita. Per impostare una pianificazione, eseguire una delle seguenti operazioni:

Annotazioni

In alternativa, è possibile creare un'attività in un processo che includa l'istruzione CREATE OR REPLACE MATERIALIZED VIEW o REFRESH e orchestrarla come qualsiasi altro processo. Consulta Attività di Lakeflow.

Nell'esempio seguente viene creata la vista mv1 materializzata dalla tabella base_table1di base e una pianificazione per aggiornare la vista materializzata una volta all'ora:

CREATE OR REPLACE MATERIALIZED VIEW mv1
  SCHEDULE EVERY 1 hour
  AS SELECT
    date,
    sum(sales) AS sum_of_sales
  FROM
    base_table1
  GROUP BY
    date;

Per impostare o modificare la pianificazione dopo la creazione, usare l'istruzione ALTER MATERIALIZED VIEW :

ALTER MATERIALIZED VIEW sales ALTER SCHEDULE EVERY 1 day;

Quando viene creata una pianificazione, un nuovo processo di Databricks viene configurato automaticamente per elaborare l'aggiornamento.

Per visualizzare una pianificazione, eseguire una delle seguenti operazioni:

  • Eseguire l'istruzione DESCRIBE EXTENDED dall'editor SQL nell'interfaccia utente di Azure Databricks. Vedi DESCRIBE TABLE.
  • Usare Catalog Explorer per visualizzare la vista materializzata. La pianificazione è elencata nella scheda Panoramica, sotto Stato aggiornamento. Vedere Che cos'è Catalog Explorer?.

Quando è prevista una pianificazione per gli aggiornamenti, è comunque possibile eseguire un aggiornamento manuale in qualsiasi momento, se sono necessari dati aggiornati.

Fermare un aggiornamento attivo

Per arrestare un aggiornamento attivo nell'interfaccia utente di Lakeflow Declarative Pipelines, nella pagina Dettagli pipeline fare clic su Arresta per arrestare l'aggiornamento della pipeline. È anche possibile arrestare l'aggiornamento con l'interfaccia della riga di comando di Databricks o l'operazione POST /api/2.0/pipelines/{pipeline_id}/stop nell'API Pipeline.

Eliminare definitivamente i record da una vista materializzata con vettori di eliminazione abilitati

Importante

Il supporto della dichiarazione REORG con viste materializzate è disponibile in anteprima pubblica.

Annotazioni

  • L'utilizzo di un'istruzione REORG con una vista materializzata richiede Databricks Runtime 15.4 e versioni successive.
  • Sebbene sia possibile usare l'istruzione REORG con qualsiasi vista materializzata, è necessaria solo quando si eliminano record da una vista materializzata con vettori di eliminazione abilitati. Il comando non ha alcun effetto quando viene usato con una vista materializzata senza vettori di eliminazione abilitati.

Per eliminare fisicamente i record dall'archiviazione sottostante per una visualizzazione materializzata con vettori di eliminazione abilitati, ad esempio per la conformità al GDPR, è necessario eseguire ulteriori passaggi per garantire che un'operazione VACUUM venga eseguita sui dati della vista materializzata.

Per eliminare fisicamente i record:

  1. Eseguire un'istruzione REORG sulla vista materializzata, specificando il parametro APPLY (PURGE). Ad esempio, REORG TABLE <materialized-view-name> APPLY (PURGE);. Vedi REORG TABLE.
  2. Attendere il passaggio del periodo di conservazione dei dati della vista materializzata. Il periodo di conservazione dei dati predefinito è di sette giorni, ma può essere configurato con la proprietà della tabella delta.deletedFileRetentionDuration. Vedere Configurare la conservazione dei dati per le query di spostamento cronologico.
  3. REFRESH la vista materializzata. Consultare Aggiornare una vista materializzata. Entro 24 ore dall'operazione REFRESH , le attività di manutenzione di Lakeflow Declarative Pipelines, inclusa l'operazione VACUUM necessaria per garantire che i record vengano eliminati definitivamente, vengono eseguiti automaticamente.

Eliminare una vista materializzata

Annotazioni

Per inviare il comando per eliminare una vista materializzata, è necessario essere il proprietario di tale vista materializzata o disporre del privilegio MANAGE nella vista materializzata.

Per eliminare una vista materializzata, usare l'istruzione DROP VIEW. Per inviare un'istruzione DROP, utilizzare l'editor SQL nell'interfaccia utente di Azure Databricks, l’interfaccia utente della riga di comando di Databricks SQL o l'API Databricks SQL. L'esempio seguente elimina la vista materializzata mv1:

DROP MATERIALIZED VIEW mv1;

È anche possibile usare Esplora cataloghi per eliminare una vista materializzata.

  1. Fare clic sull'icona Dati.Catalogo nella barra laterale.
  2. Nel riquadro di esplorazione dei cataloghi a sinistra, aprite il catalogo e selezionate lo schema in cui si trova la vista materializzata.
  3. Aprire l'elemento tabelle sotto lo schema selezionato e fare clic sulla vista materializzata.
  4. Nell'icona del menu Kebab selezionare Elimina.

Comprendere i costi di una vista materializzata

Poiché una vista materializzata viene eseguita in modalità serverless, al di fuori del calcolo che configuri per un notebook o un job, potresti chiederti come comprendere i costi associati. L'utilizzo delle visualizzazioni materializzate è monitorato dal consumo di DBU. Per altre informazioni, vedere Che cos'è il consumo DBU di una vista materializzata o di una tabella di streaming?

Abilitazione del rilevamento delle righe

Per supportare gli aggiornamenti incrementali dalle tabelle Delta, è necessario abilitare il rilevamento delle righe per tali tabelle di origine. Se si ricrea una tabella di origine, è necessario riabilitare il rilevamento delle righe.

Nell'esempio seguente viene illustrato come abilitare il rilevamento delle righe in una tabella:

ALTER TABLE source_table SET TBLPROPERTIES (delta.enableRowTracking = true);

Per altre informazioni, vedere Usare il rilevamento delle righe per le tabelle Delta

Limitazioni

  • Per i requisiti dell’ambiente di calcolo e dell'area di lavoro, si veda Requisiti.
  • Per i requisiti di aggiornamento incrementale, vedere Aggiornamento incrementale per le viste materializzate.
  • Le viste materializzate non supportano colonne di identità o chiavi surrogate.
  • Se in una vista materializzata viene utilizzata un'aggregazione di somma su una colonna NULL-abile e rimangono solo i valori NULL in quella colonna, il valore di aggregazione risultante delle viste materializzate è zero anziché NULL.
  • Non è possibile leggere un feed di dati delle modifiche da una vista materializzata.
  • Le interrogazioni sui viaggi nel tempo non sono supportate nelle viste materializzate.
  • I file sottostanti che supportano le viste materializzate potrebbero includere dati provenienti da tabelle a monte ( comprendenti possibili informazioni di identificazione personale) che non compaiono nella definizione della vista materializzata. Questi dati vengono aggiunti automaticamente all'archivio sottostante per supportare l'aggiornamento incrementale delle viste materializzate. Poiché i file sottostanti di una vista materializzata potrebbero rischiare di esporre dati da tabelle upstream non incluse nello schema della vista materializzata, Databricks consiglia di non condividere l'archiviazione sottostante con consumer downstream non attendibili. Si supponga, ad esempio, che la definizione di una vista materializzata includa una clausola COUNT(DISTINCT field_a). Anche se la definizione della vista materializzata include solo la clausola di aggregazione COUNT DISTINCT, i file sottostanti conterranno un elenco dei valori effettivi di field_a.
  • È possibile che vengano addebitati alcuni addebiti di calcolo serverless, anche quando si usano queste funzionalità in un ambiente di calcolo dedicato.
  • Se è necessario usare una connessione Private Link di Azure con la vista materializzata, contattare il rappresentante di Databricks.