Condividi tramite


Utilizzare le viste materializzate in Databricks SQL

Nota

Se è necessario usare una connessione collegamento privato di Azure con la vista materializzata, contattare il rappresentante di Databricks.

Questo articolo descrive come creare e usare 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 del catalogo Unity che consentono agli utenti di precompilare i risultati in base alla versione più recente dei dati nelle tabelle di origine. Le viste materializzate in Azure Databricks differiscono da altre implementazioni, perché i risultati restituiti riflettono lo stato dei dati quando la vista materializzata è stata aggiornata per l'ultima volta anziché aggiornare sempre i risultati quando viene eseguita una query sulla vista materializzata. È possibile aggiornare manualmente le viste materializzate o pianificare gli aggiornamenti.

Le viste materializzate sono potenti 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 riducono i costi e migliorano la latenza delle query precalcolando le query lente e i calcoli usati di frequente. Le viste materializzate consentono anche trasformazioni facili da usare, pulendo, arricchendo e denormalizzando le tabelle di base. Le viste materializzate possono ridurre i costi e fornire un'esperienza semplificata all'utente finale perché, in alcuni casi, possono calcolare in modo incrementale le modifiche dalle tabelle di base.

Le viste materializzate sono state supportate per la prima volta in Azure Databricks con il lancio di tabelle live Delta. Quando si crea una vista materializzata in un databricks SQL Warehouse, viene creata una pipeline serverless per elaborare gli aggiornamenti alla vista materializzata. È possibile monitorare lo stato delle operazioni di aggiornamento nell'interfaccia utente delle tabelle live Delta o nell'API delle pipeline. Si veda Visualizzare lo stato di aggiornamento di una vista materializzata.

Requisiti

Per creare o aggiornare viste materializzate:

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

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

  • L'area di lavoro deve trovarsi in una regione che supporta i warehouse SQL serverless.

Eseguire una query sulla vista materializzata.

  • È 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 seguenti risorse di calcolo seguenti:
    • Warehouse SQL
    • Interfacce delle tabelle live Delta
    • Modalità di accesso condivisa all'ambiente di calcolo
    • 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 per il calcolo di un singolo utente.
    • Solo se si è il proprietario della vista materializzata: una singola risorsa di calcolo in modalità di accesso utente che esegue Databricks Runtime tra 14.3 e 15.3.

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. Per ogni vista materializzata di Databricks SQL viene creata automaticamente una pipeline di tabelle live Delta serverless. Quando la vista materializzata viene aggiornata, la pipeline delle tabelle live Delta 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.

È possibile selezionare il canale di runtime in cui viene eseguita l'istruzione create usando la TBLPROPERTIES clausola con il valore impostato su "PREVIEW" o "CURRENT". Il valore predefinito è "CURRENT". Per altre informazioni sui canali di tabelle live Delta, vedere Canali di runtime di Tabelle live Delta. Per altre informazioni sulla sintassi e sui parametri, si veda CREATE MATERIALIZED VIEW.

Nota

L'utente che crea una vista materializzata è il proprietario della visualizzazione materializzata e 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.

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

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;

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.

Aggiornare una vista materializzata

L'operazione REFRESH aggiorna la vista materializzata per riflettere le ultime modifiche apportate alla tabella di base. L'operazione è sincrona per impostazione predefinita, ovvero il comando si blocca fino al completamento dell'operazione di aggiornamento. Per aggiornare una vista materializzata, usare l'istruzione REFRESH MATERIALIZED VIEW. Per altre informazioni sulla sintassi e sui parametri SQL per questo comando, vedere REFRESH (MATERIALIZED VIEW o STREAMING TABLE). 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.

Solo il proprietario può REFRESH la visualizzazione materializzata.

Nell'esempio seguente viene aggiornata la vista materializzata mv1:

REFRESH MATERIALIZED VIEW mv1;

Come vengono aggiornate le viste materializzate di Databricks SQL?

Le viste materializzate creano e usano automaticamente pipeline delta live tables serverless per elaborare le operazioni di aggiornamento. L'aggiornamento viene gestito dalla pipeline delle tabelle live Delta e l'aggiornamento viene monitorato dal databricks SQL Warehouse usato per creare la vista materializzata. Le viste materializzate possono essere aggiornate usando una pipeline di tabelle live Delta in esecuzione in base a una pianificazione. Vedere Triggered vs. continuous pipeline mode (Modalità pipeline attivata e continua).

Nota

Il runtime delle tabelle live Delta non è in grado di rilevare le modifiche nelle origini dati non Delta. La tabella viene aggiornata regolarmente, ma con un intervallo di trigger predefinito più elevato per impedire un rallentamento eccessivo della ricompilazione di qualsiasi elaborazione incrementale in corso nel calcolo.

Per impostazione predefinita, le operazioni di aggiornamento vengono eseguite in modo sincrono. È anche possibile impostare un'operazione di aggiornamento in modo asincrono. Questa impostazione può essere impostata usando il comando refresh. 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 per la sequenziazione delle operazioni di aggiornamento in strumenti di orchestrazione come Databricks Jobs, usare un aggiornamento sincrono. Per orchestrare le viste materializzate con un processo, usare il tipo di attività SQL . Vedere Pianificare e orchestrare i flussi di lavoro.
  • Asincrono: un aggiornamento asincrono avvia un processo in background nelle tabelle live Delta quando inizia un aggiornamento di visualizzazione materializzata, 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.

Alcune query possono essere aggiornate in modo incrementale. Vedere Aggiornamento incrementale per le viste materializzate. Se non è possibile eseguire un aggiornamento incrementale, viene eseguito un aggiornamento completo.

Pianificare gli aggiornamenti 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:

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.
  • Usare Esplora cataloghi per visualizzare la vista materializzata. La pianificazione è elencata nella scheda Panoramica, in Stato aggiornamento. Si veda Che cos'è Esplora cataloghi?.

Visualizzare lo stato di aggiornamento di una vista materializzata.

Nota

Poiché una pipeline delle tabelle Delta Live gestisce gli aggiornamenti delle viste materializzate, esiste una latenza dovuta al tempo di avvio della pipeline. Questo tempo potrebbe essere compreso tra i secondi e i minuti, oltre al tempo necessario per eseguire l'aggiornamento.

È possibile visualizzare lo stato di aggiornamento di una vista materializzata visualizzando la pipeline che gestisce la vista materializzata nell'interfaccia utente Tabelle Delta Live o visualizzando le Informazioni sull’aggiornamento restituite dal comando DESCRIBE EXTENDED per la vista materializzata.

È anche possibile visualizzare la cronologia degli aggiornamenti di una vista materializzata eseguendo una query sul registro eventi delle tabelle Delta live. Si veda Visualizzare la cronologia di aggiornamento di una vista materializzata.

Visualizzare lo stato di aggiornamento nell'interfaccia utente delle tabelle Delta live

Per impostazione predefinita, la pipeline delle tabelle Delta live che gestisce una vista materializzata non è visibile nell'interfaccia utente delle tabelle Delta live. Per visualizzare la pipeline nell'interfaccia utente delle tabelle Delta live, è necessario accedere direttamente al collegamento alla pagina Dettagli della pipeline. Per accedere al collegamento:

  • Copiare e incollare il collegamento visualizzato nella riga Aggiornamento più recente della tabella restituita dall'istruzione DESCRIBE EXTENDED .
  • Nella scheda derivazione per la vista materializzata fare clic su Pipeline e quindi sul collegamento alla pipeline.

Per i comandi asincroni REFRESH inviati usando l'editor SQL nell'interfaccia utente di Azure Databricks, è possibile visualizzare lo stato di aggiornamento seguendo il collegamento illustrato nel pannello Risultati.

Arrestare un aggiornamento attivo

Per arrestare un aggiornamento attivo nell'interfaccia utente delle tabelle live Delta, 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.

Aggiornare la definizione di una vista materializzata

Per aggiornare la definizione di una vista materializzata, è prima necessario eliminare, e poi ricreare, la vista materializzata.

Eliminare una vista materializzata

Nota

Per inviare il comando per eliminare una vista materializzata, è necessario essere il proprietario di quella 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. Nell'esempio seguente viene eliminata la vista materializzata mv1:

DROP MATERIALIZED VIEW mv1;

Descrivere una vista materializzata

Per recuperare le colonne e i tipi di dati per una vista materializzata, usare l'istruzione DESCRIBE . Per recuperare le colonne, i tipi di dati e i metadati, ad esempio proprietario, posizione, ora di creazione e stato di aggiornamento per una vista materializzata, usare DESCRIBE EXTENDED. Per inviare un'istruzione DESCRIBE, 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.

Modificare il proprietario di una visualizzazione materializzata

È possibile modificare il proprietario di una visualizzazione materializzata se si è un amministratore del metastore e un amministratore dell'area di lavoro. Le viste materializzate creano e usano automaticamente pipeline di tabelle live Delta per elaborare le modifiche. Usare la procedura seguente per modificare un proprietario delle viste materializzate:

  • Nella scheda derivazione per la vista materializzata fare clic su Pipeline e quindi sul collegamento alla pipeline.
  • Fare clic sul Menu kebab menu kebab a destra del nome della pipeline e fare clic su Autorizzazioni. Verrà visualizzata la finestra di dialogo delle autorizzazioni.
  • Fare clic su x a destra del nome del proprietario corrente per rimuoverlo.
  • Iniziare a digitare per filtrare l'elenco degli utenti disponibili. Fare clic sull'utente che deve essere il nuovo proprietario della pipeline.
  • Fare clic su Salva per salvare le modifiche e chiudere la finestra di dialogo.

Tutte le risorse della pipeline, incluse le viste materializzate in essa definite, sono di proprietà del nuovo proprietario della pipeline. Tutti gli aggiornamenti futuri vengono eseguiti usando l'identità del nuovo proprietario.

Controllare l'accesso alle viste materializzate

Le viste materializzate supportano controlli di accesso avanzati per consentire la condivisione dei dati evitando di esporre dati potenzialmente privati. Un proprietario di viste materializzate può concedere privilegi SELECT ad altri utenti. Gli utenti con accesso SELECT alla vista materializzata non devono accedere SELECT alle tabelle a cui fa riferimento la vista materializzata. Questo controllo di accesso consente la condivisione dei dati durante il controllo dell'accesso ai dati sottostanti.

Concedere privilegi a una vista materializzata

Per concedere l'accesso a una vista materializzata, usare l'istruzione GRANT:

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

Il privilege_type può essere:

  • SELECT - L'utente può SELECT viste materializzate.
  • REFRESH - L'utente può REFRESH viste materializzate. Gli aggiornamenti vengono eseguiti usando le autorizzazioni del proprietario.

Nell'esempio seguente viene creata una vista materializzata e vengono concessi privilegi di selezione e aggiornamento a un utente:

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Revocare i privilegi a una vista materializzata

Per revocare l'accesso a una vista materializzata, usare l'istruzione REVOKE:

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Quando i privilegi SELECTdi una tabella di base vengono revocati dal proprietario della vista materializzata o da qualsiasi altro utente a cui sono stati concessi privilegi SELECTalla vista materializzata oppure la tabella di base viene eliminata, il proprietario della vista materializzata o l'accesso concesso dall'utente è comunque in grado di eseguire query sulla vista materializzata. In ogni caso, si ha il seguente comportamento:

  • Il proprietario della vista materializzata o altri utenti che hanno perso l'accesso a una vista materializzata non possono più REFRESH quella vista materializzata e la vista materializzata diventerà obsoleta.
  • Se l’operazione è automatizzata con una pianificazione, la successiva pianificazione REFRESH ha esito negativo o non viene eseguita.

Nel seguente esempio viene revocato il privilegio SELECT a mv1:

REVOKE SELECT ON mv1 FROM user1;

Abilitare il feed di dati delle modifiche

Il feed di dati delle modifiche è necessario nelle tabelle di base delle viste materializzate, ad eccezione di alcuni casi d'uso avanzati. Per abilitare il feed di dati delle modifiche in una tabella di base, impostare la proprietà delta.enableChangeDataFeed della tabella usando la seguente sintassi:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Visualizzare la cronologia di aggiornamento di una vista materializzata.

Per visualizzare lo stato delle operazioni REFRESH in una vista materializzata, inclusi gli aggiornamenti correnti e precedenti, eseguire una query sul registro eventi delle tabelle Delta live:

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
ORDER BY
  timestamp desc;

Sostituire <fully-qualified-table-name> con il nome completo della vista materializzata, inclusi il catalogo e lo schema.

Si veda Che cos'è il registro eventi delle tabelle Delta Live?.

Limitazioni

  • Per i requisiti dell’ambiente di calcolo e dell'area di lavoro, si veda Requisiti.
  • Le viste materializzate non supportano colonne Identity o chiavi sostitutive.
  • 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.
  • 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 di vista materializzata include solo la clausola COUNT DISTINCT di aggregazione , i file sottostanti conterranno un elenco dei valori effettivi di field_a.