Usare viste materializzate in Databricks SQL

Importante

Questa funzionalità è disponibile in anteprima pubblica.

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 di Unity Catalog 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 precalcotando le query lente e i calcoli usati di frequente. Le viste materializzate consentono anche trasformazioni facili da usare tramite la pulizia, l'arricchimento e la denormalizzazione delle tabelle di base. Le viste materializzate possono ridurre i costi offrendo un'esperienza utente finale semplificata 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 nella piattaforma data intelligence di Databricks con il lancio di tabelle live Delta. Quando si crea una vista materializzata in un databricks SQL Warehouse, viene creata una pipeline di tabelle live Delta per elaborare gli aggiornamenti alla vista materializzata. È possibile monitorare lo stato delle operazioni di aggiornamento nell'interfaccia utente delle tabelle live Delta, nell'API Tabelle live Delta o nell'interfaccia della riga di comando di Delta Live Tables. Vedere Visualizzare lo stato di un aggiornamento materializzato della vista.

Requisiti

  • Per creare e aggiornare viste materializzate, è necessario usare un databricks SQL warehouse abilitato per Unity Catalog.

  • L'area di lavoro deve trovarsi in un'area abilitata per serverless.

Per informazioni sulle restrizioni quando si usano viste materializzate con Databricks SQL, vedere Limitazioni.

Creare una vista materializzata

Per creare una vista materializzata, usare l'istruzione CREATE MATERIALIZED VIEW . Vedere CREATE MATERIALIZED VIEW (CREATE MATERIALIZED VIEW ) nella guida di riferimento a Databricks SQL. 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.

Nota

L'utente che crea una vista materializzata è il proprietario della visualizzazione materializzata e deve disporre delle autorizzazioni seguenti:

  • SELECT privilegio sulle tabelle di base a cui fa riferimento la vista materializzata.
  • USE CATALOG privilegi USE SCHEMA per il catalogo e lo schema contenenti le tabelle di origine per la vista materializzata.
  • USE CATALOG privilegi USE SCHEMA per il catalogo e lo schema di destinazione per la vista materializzata.
  • CREATE TABLE e CREATE MATERIALIZED VIEW privilegi per lo schema contenente la vista materializzata.

Nell'esempio seguente viene creata la vista mv1 materializzata dalla tabella base_table1di base :

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

Come vengono create le viste materializzate?

Le operazioni di visualizzazione CREATE materializzata di Databricks SQL usano un databricks SQL Warehouse per creare e caricare dati nella vista materializzata. Poiché la creazione di una vista materializzata è un'operazione sincrona nel data warehouse di Databricks SQL, il CREATE MATERIALIZED VIEW comando 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. Quando la vista materializzata viene aggiornata, viene avviato un aggiornamento della pipeline Delta Live Tables per elaborare l'aggiornamento.

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, vedere 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. Per aggiornare una vista materializzata, usare l'istruzione REFRESH MATERIALIZED VIEW . Vedere REFRESH (MATERIALIZED VIEW and STREAMING TABLE) nella guida di riferimento a Databricks SQL. Per inviare un'istruzione di aggiornamento, usare l'editor SQL nell'interfaccia utente di Azure Databricks, nell'interfaccia della riga di comando sql di Databricks o nell'API SQL di Databricks.

Solo il proprietario può REFRESH la visualizzazione materializzata.

Nell'esempio seguente viene aggiornata la mv1 vista materializzata:

REFRESH MATERIALIZED VIEW mv1;

Come vengono aggiornate le viste materializzate di Databricks SQL?

Le viste materializzate sql di Databricks usano tabelle live Delta per le operazioni di aggiornamento. Quando la vista materializzata viene aggiornata, viene avviato un aggiornamento della pipeline Delta Live Tables che gestisce la vista materializzata per elaborare l'aggiornamento.

Poiché l'aggiornamento viene gestito da una pipeline di tabelle live Delta, il databricks SQL warehouse usato per creare la vista materializzata non viene usato e non deve essere in esecuzione durante l'operazione di aggiornamento.

Alcune query possono essere aggiornate in modo incrementale. Vedere Operazioni di aggiornamento 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. Configurare questa pianificazione con la SCHEDULE clausola quando si crea la vista materializzata o si aggiunge una pianificazione con l'istruzione ALTER VIEW. Quando viene creata una pianificazione, un nuovo processo di Databricks viene configurato automaticamente per elaborare l'aggiornamento. È possibile visualizzare la pianificazione in qualsiasi momento con l'istruzione DESCRIBE EXTENDED .

Aggiornare la definizione di una vista materializzata

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

Eliminare una vista materializzata

Nota

Per inviare il comando per eliminare una vista materializzata, è necessario essere il proprietario di tale vista materializzata.

Per eliminare una vista materializzata, usare l'istruzione DROP VIEW . Per inviare un'istruzioneDROP, è possibile usare l'editor SQL nell'interfaccia utente di Azure Databricks, nell'interfaccia della riga di comando sql di Databricks o nell'API SQL di Databricks. Nell'esempio seguente viene eliminata la mv1 vista materializzata:

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'istruzioneDESCRIBE, usare l'editor SQL nell'interfaccia utente di Azure Databricks, nell'interfaccia della riga di comando sql di Databricks o nell'API SQL di Databricks.

Visualizzare lo stato di un aggiornamento materializzato della visualizzazione

Nota

Poiché una pipeline delta live tables gestisce gli aggiornamenti delle viste materializzate, la latenza è dovuta al tempo di avvio per la 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 un aggiornamento materializzato della vista visualizzando la pipeline che gestisce la visualizzazione materializzata nell'interfaccia utente delle tabelle live delta o visualizzando le informazioni di aggiornamento restituite dal DESCRIBE EXTENDED comando per la vista materializzata.

È anche possibile visualizzare la cronologia degli aggiornamenti di una vista materializzata eseguendo una query sul registro eventi delta live tables. Vedere Visualizzare la cronologia degli aggiornamenti per una vista materializzata.

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

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

  • Se si invia il REFRESH comando nell'editor SQL, seguire il collegamento nel pannello Risultati.
  • Seguire il collegamento restituito dall'istruzione DESCRIBE EXTENDED .
  • Nella scheda derivazione per la vista materializzata fare clic su Pipeline e quindi sul collegamento alla pipeline.

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

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:

  • Fare clic su Icona ProcessiFlussi di lavoro, quindi fare clic sulla scheda Tabelle live Delta.
  • Fare clic sul nome della pipeline di cui si vuole modificare il proprietario.
  • 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 rimuovere il proprietario corrente.
  • 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.

Tutti gli asset della pipeline, incluse le viste materializzate definite nella pipeline, 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 supportare la condivisione dei dati evitando di esporre dati potenzialmente privati. Un proprietario di visualizzazione materializzato può concedere SELECT privilegi ad altri utenti. Gli utenti con SELECT accesso 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 la visualizzazione materializzata.
  • REFRESH : l'utente può REFRESH la visualizzazione materializzata. 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 da una vista materializzata

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

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

Quando SELECT i privilegi di una tabella di base vengono revocati dal proprietario della vista materializzata o da qualsiasi altro utente a cui sono stati concessi SELECT privilegi alla 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. Tuttavia, si verifica il comportamento seguente:

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

Nell'esempio seguente viene revocato il SELECT privilegio da 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 delta.enableChangeDataFeed proprietà table usando la sintassi seguente:

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

Visualizzare la cronologia degli aggiornamenti per una vista materializzata

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

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, incluso il catalogo e lo schema.

Vedere Che cos'è il registro eventi di Delta Live Tables?.

Determinare se viene usato un aggiornamento incrementale o completo

Per ottimizzare le prestazioni degli aggiornamenti delle viste materializzate, Azure Databricks usa un modello di costo per selezionare la tecnica usata per l'aggiornamento. La tabella seguente descrive queste tecniche:

Tecnica Aggiornamento incrementale? Descrizione
FULL_RECOMPUTE No La vista materializzata è stata ricompilate completamente
NO_OP Non applicabile La vista materializzata non è stata aggiornata perché non sono state rilevate modifiche alla tabella di base.
ROW_BASED oppure PARTITION_OVERWRITE La vista materializzata è stata aggiornata in modo incrementale usando la tecnica specificata.

Per determinare la tecnica usata, eseguire una query sul registro eventi delta live tables in cui event_type è planning_information:

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

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

Vedere Che cos'è il registro eventi di Delta Live Tables?.

Limitazioni

  • Esistono restrizioni sulla modalità di gestione delle MV e sulla posizione in cui è possibile eseguire query:

    • Le viste materializzate di Databricks SQL possono essere create e aggiornate solo nei data warehouse pro SQL e in SQL Warehouse serverless.
    • Una vista materializzata sql di Databricks può essere aggiornata solo dall'area di lavoro che l'ha creata.
    • Le viste materializzate di Databricks SQL possono essere eseguite solo da databricks SQL warehouse, tabelle live Delta e cluster condivisi che eseguono Databricks Runtime 11.3 o versione successiva. Non è possibile eseguire query sulle viste materializzate dai cluster in modalità accesso utente singolo.
  • Le viste materializzate non supportano colonne Identity o chiavi surrogate.

  • Se in una vista materializzata viene utilizzata un'aggregazione di somma su una NULLcolonna -able e rimangono solo NULL i valori in tale colonna, il valore di aggregazione risultante delle viste materializzate è zero anziché NULL.

  • I file sottostanti che supportano viste materializzate possono includere dati da tabelle upstream (incluse le possibili informazioni personali) che non vengono visualizzati 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 COUNT(DISTINCT field_a) clausola . Anche se la definizione di vista materializzata include solo la clausola di aggregazione COUNT DISTINCT , i file sottostanti conterranno un elenco dei valori effettivi di field_a.

  • Le viste materializzate di Databricks SQL non sono supportate nelle aree Stati Uniti centro-meridionali e Stati Uniti occidentali 2.