Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive la semantica e i requisiti per gli aggiornamenti incrementali nelle viste materializzate e identifica le operazioni, le parole chiave e le clausole SQL che supportano l'aggiornamento incrementale. Include una discussione sulle differenze tra gli aggiornamenti incrementali e completi e include raccomandazioni per la scelta tra viste materializzate e tabelle di streaming.
Quando si eseguono aggiornamenti delle viste materializzate usando le pipeline serverless, è possibile aggiornare in modo incrementale molte query. Gli aggiornamenti incrementali consentono di risparmiare sui costi di calcolo rilevando le modifiche nelle origini dati usate per definire la vista materializzata e calcolando in modo incrementale il risultato.
Gli aggiornamenti automatici sono eseguiti sulla computazione serverless
Le operazioni di aggiornamento vengono eseguite nelle pipeline serverless, indipendentemente dal fatto che l'operazione sia stata definita in Databricks SQL o con pipeline dichiarative di Lakeflow Spark.
Per le viste materializzate definite con Databricks SQL, l'area di lavoro non deve essere abilitata per le pipeline dichiarative di Lakeflow Spark serverless. L'aggiornamento userà automaticamente una pipeline serverless.
Per le viste materializzate definite usando le pipeline dichiarative di Lakeflow Spark, è necessario configurare la pipeline per l'uso serverless. Consulta Configurare una pipeline serverless.
Quali sono le semantiche di aggiornamento per le viste materializzate?
Le viste materializzate garantiscono risultati equivalenti alle query batch. Si consideri ad esempio la query di aggregazione seguente:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Quando si esegue questa query usando qualsiasi prodotto Azure Databricks, il risultato viene calcolato usando la semantica batch per aggregare tutti i record nell'origine transactions_table, ovvero tutti i dati di origine vengono analizzati e aggregati in un'unica operazione.
Note
Alcuni prodotti Azure Databricks memorizzano nella cache i risultati automaticamente all'interno o tra più sessioni se le origini dati non sono state modificate dopo l'esecuzione dell'ultima query. I comportamenti di memorizzazione nella cache automatica differiscono dalle viste materializzate.
L'esempio seguente trasforma questa query batch in una vista materializzata:
CREATE OR REPLACE MATERIALIZED VIEW transaction_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Quando si aggiorna una vista materializzata, il risultato calcolato è identico alla semantica della query batch. Questa query è un esempio di vista materializzata che può essere aggiornata in modo incrementale, vale a dire che l'operazione di aggiornamento tenta di elaborare solo dati nuovi o modificati nell'transactions_table di origine per calcolare i risultati.
Considerazioni sulle origini dati per le viste materializzate
Sebbene sia possibile definire una vista materializzata su qualsiasi origine dati, non tutte le origini dati sono adatte alle viste materializzate. Considerare le avvertenze e le raccomandazioni seguenti:
Important
Le viste materializzate tentano di aggiornare in modo incrementale i risultati per le operazioni supportate. Alcune modifiche apportate alle origini dati richiedono un aggiornamento completo.
Tutte le origini dati per le viste materializzate devono essere in grado di gestire la semantica di aggiornamento completo, anche se la query che definisce la vista materializzata supporta l'aggiornamento incrementale.
- Per le query in cui un aggiornamento completo sarebbe troppo costoso, utilizzare le tabelle di streaming per garantire l'elaborazione una sola volta. Gli esempi includono tabelle molto grandi.
- Non definire una vista materializzata su un'origine dati se i record devono essere elaborati una sola volta. Invece, usare le tabelle di streaming. Di seguito sono riportati alcuni esempi:
- Origini dati che non mantengono la cronologia dei dati, ad esempio Kafka.
- Operazioni di inserimento, ad esempio query che usano il caricatore automatico per inserire dati dall'archiviazione di oggetti cloud.
- Qualsiasi origine dati in cui si prevede di eliminare o archiviare i dati dopo l'elaborazione, ma deve conservare le informazioni nelle tabelle downstream. Ad esempio, una tabella partizionata con data in cui si prevede di eliminare record precedenti a una determinata soglia.
- Non tutte le origini dati supportano gli aggiornamenti incrementali. Le origini dati seguenti supportano l'aggiornamento incrementale:
- Tabelle Delta, comprese quelle gestite da Unity Catalog e le tabelle esterne supportate da Delta Lake.
- Viste materializzate.
- Tabelle di streaming, comprese le destinazioni delle operazioni di
AUTO CDC ... INTO.
- Alcune operazioni di aggiornamento incrementale richiedono l'abilitazione del rilevamento delle righe nelle origini dati sottoposte a query. Il rilevamento delle righe è una funzionalità Delta Lake supportata solo dalle tabelle Delta, che includono viste materializzate, tabelle di streaming e tabelle gestite di Unity Catalog. Vedere Usare il rilevamento delle righe per le tabelle Delta.
- Le origini dati con filtri di riga o maschere di colonna definite non supportano l'aggiornamento incrementale. Vedere Filtri di riga e maschere di colonna
Ottimizzare le viste materializzate
Per ottenere prestazioni ottimali, Databricks consiglia di abilitare le funzionalità seguenti in tutte le tabelle di origine delle viste materializzate:
È possibile impostare queste funzionalità durante la creazione o versioni successive con l'istruzione ALTER TABLE . Per esempio:
ALTER TABLE <table-name> SET TBLPROPERTIES (
delta.enableDeletionVectors = true,
delta.enableRowTracking = true,
delta.enableChangeDataFeed = true);
Tipi di aggiornamento per le viste materializzate
Quando viene aggiornata una vista materializzata, è possibile specificare un aggiornamento o un aggiornamento completo.
- Un aggiornamento tenta di eseguire un aggiornamento incrementale, ma eseguirà una ricomputazione completa dei dati, se necessario. L'aggiornamento incrementale è disponibile solo quando il calcolo a cui si è connessi è serverless.
- Un aggiornamento completo ricalcola sempre tutti gli input alla visualizzazione materializzata e reimposta tutti i checkpoint.
Per determinare il tipo di aggiornamento usato da un aggiornamento, vedere Determinare il tipo di aggiornamento di un aggiornamento.
Aggiornamento predefinito
Aggiornamento predefinito per una vista materializzata nei tentativi serverless di eseguire un aggiornamento incrementale. Un aggiornamento incrementale elabora le modifiche nei dati sottostanti dopo l'ultimo aggiornamento e quindi aggiunge tali dati alla tabella. A seconda delle tabelle di base e delle operazioni incluse, è possibile aggiornare in modo incrementale solo determinati tipi di viste materializzate. Se non è possibile un aggiornamento incrementale o l'ambiente di calcolo connesso è classico anziché serverless, viene eseguita una ricomputazione completa.
L'output di un aggiornamento incrementale e una ricomputazione completa sono gli stessi. Azure Databricks esegue un'analisi dei costi per scegliere l'opzione più economica tra un aggiornamento incrementale e una ricompilazione completa.
Solo le viste materializzate che vengono aggiornate tramite pipeline serverless possono utilizzare l'aggiornamento incrementale. Le viste materializzate che non usano pipeline serverless vengono sempre ricalcolate completamente.
Quando si creano viste materializzate con SQL Warehouse o Serverless Lakeflow Spark Declarative Pipelines, Azure Databricks le aggiorna in modo incrementale, se le interrogazioni sono supportate. Se una query usa espressioni non supportate, Azure Databricks esegue invece una ricompilazione completa, che può aumentare i costi.
Per determinare il tipo di aggiornamento usato da un aggiornamento, vedere Determinare il tipo di aggiornamento di un aggiornamento.
Aggiornamento completo
Un aggiornamento completo sovrascrive i risultati nella vista materializzata cancellando la tabella e i checkpoint e rielaborando tutti i dati disponibili nell'origine.
Per eseguire un aggiornamento completo sulle viste materializzate definite tramite Databricks SQL, usare la sintassi seguente:
REFRESH MATERIALIZED VIEW mv_name FULL
Per le viste materializzate definite in Pipeline dichiarative di Lakeflow Spark, è possibile scegliere di eseguire un aggiornamento completo nei set di dati selezionati o in tutti i set di dati in una pipeline. Vedi semantica di aggiornamento della pipeline.
Important
Quando un aggiornamento completo viene eseguito su un'origine dati in cui i record sono stati rimossi a causa della soglia di conservazione dei dati o dell'eliminazione manuale, i record rimossi non vengono riflessi nei risultati calcolati. Potrebbe non essere possibile recuperare i dati obsoleti se i dati non sono più disponibili nell'origine. Questo potrebbe anche modificare lo schema per le colonne che non esistono più nei dati di origine.
Supporto per l'aggiornamento incrementale della vista materializzata
La tabella seguente elenca il supporto per l'aggiornamento incrementale in base alla parola chiave o alla clausola SQL.
Important
Alcune parole chiave e clausole richiedono l'attivazione del tracciamento delle righe nelle origini dati interpellate. Vedere Usare il rilevamento delle righe per le tabelle Delta.
Queste parole chiave e clausole sono contrassegnate con una stella (*) nella tabella seguente.
| Parola chiave o clausola SQL | Supporto per l'aggiornamento incrementale |
|---|---|
SELECT espressioni* |
Sì, sono supportate espressioni che includono funzioni predefinite deterministiche e funzioni definite dall'utente non modificabili. |
GROUP BY |
Yes |
WITH |
Sì, sono supportate espressioni di tabella comuni. |
UNION ALL* |
Yes |
FROM |
Le tabelle di base supportate includono tabelle Delta, viste materializzate e tabelle di streaming. |
WHERE, HAVING* |
Le clausole di filtro, ad esempio WHERE e HAVING, sono supportate. |
INNER JOIN* |
Yes |
LEFT OUTER JOIN* |
Yes |
FULL OUTER JOIN* |
Yes |
RIGHT OUTER JOIN* |
Yes |
OVER |
Yes.
PARTITION_BY le colonne devono essere specificate per l'incrementalizzazione nelle funzioni di finestra. |
QUALIFY |
Yes |
EXPECTATIONS |
Sì, le viste materializzate che includono le aspettative possono essere aggiornate in modo incrementale. Tuttavia, l'aggiornamento incrementale non è supportato per i casi seguenti:
|
| Funzioni non deterministiche | Le funzioni temporali non deterministiche sono supportate nelle WHERE clausole . Sono incluse funzioni come current_date(), current_timestamp()e now(). Altre funzioni non deterministiche non sono supportate. |
| Origini non Delta | Fonti come volumi, ubicazioni esterne e cataloghi stranieri non sono supportate. |
Determinare il tipo di aggiornamento di un aggiornamento
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:
| Technique | Aggiornamento incrementale? | Description |
|---|---|---|
FULL_RECOMPUTE |
No | La vista materializzata è stata completamente ricompilata |
NO_OP |
Non applicabile | La vista materializzata non è stata aggiornata perché non sono state rilevate modifiche alla tabella di base. |
Qualsiasi di:
|
Yes | La vista materializzata è stata aggiornata in modo incrementale usando la tecnica specificata. |
Per determinare la tecnica usata, eseguire una query sul registro eventi di Lakeflow Spark Declarative Pipelines 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 qualificato completo della vista materializzata, incluso il catalogo e lo schema.
Output di esempio per questo comando:
-
- timestamp
- message
-
2025-03-21T22:23:16.497+00:00Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.
Vedere Registro eventi della pipeline.