EXPLAIN CREATE MATERIALIZED VIEW

Si applica a:spunta segnato come sì Databricks SQL spunta segnato come sì Databricks Runtime 17.3 e versioni successive

Riporta se la query per una vista materializzata può essere aggiornata in modo incrementale. Prepondi EXPLAIN a un'affermazione CREATE MATERIALIZED VIEW per verificare l'idoneità all'incrementalizzazione prima di creare la visualizzazione materializzata o di eseguire un costoso aggiornamento.

Per informazioni sull'incrementalizzazione della visualizzazione materializzata, vedere Aggiornamento incrementale per le viste materializzate.

Quali EXPLAIN rapporti

EXPLAIN CREATE MATERIALIZED VIEW verifica se la query sia strutturalmente idonea al refresh incrementale. La Incremental Update Eligibility sezione dell'output riporta uno dei due risultati:

  • The Materialized View can be incrementally refreshed: Il pattern di query supporta il refresh incrementale.
  • The Materialized View cannot be incrementally refreshed: La query non è strutturalmente idonea per un aggiornamento incrementale. Sotto le AUTO politiche e FULL refresh, la visualizzazione materializzata utilizza un ricalcolo completo. Sotto INCREMENTAL o INCREMENTAL STRICT, fallisce CREATE perché il refresh incrementale non è possibile. La Detailed Incrementalization Info sezione elenca cosa impedisce l'incrementalizzazione.

L'idoneità strutturale non garantisce che venga eseguito un aggiornamento incrementale. Secondo la policy di aggiornamento predefinita AUTO , il modello di costo prende la decisione finale a runtime e può ancora scegliere un ricalcolo completo per una visualizzazione materializzata idonea. Per dettagli, vedi Idoneità e comportamento in tempo reale.

Quando usare EXPLAIN

Esegui EXPLAIN CREATE MATERIALIZED VIEW:

  • Prima di distribuire una nuova visualizzazione materializzata, verifica che il query pattern supporti l'aggiornamento incrementale.
  • Quando fai debug e aggiornamenti lenti, per confermare che la visualizzazione materializzata sia idonea. Se non lo è, riscrivisti la query.
  • Dopo aver riscritto una query, per verificare che la nuova versione sia idonea.
  • Quando migri da dbt o da un altro strumento, per verificare che le query trasformate traggano beneficio da un refresh incrementale.

Sintassi

EXPLAIN [CREATE MATERIALIZED VIEW query]

Parametri

  • query

    Query SQL che crea una vista materializzata. Prepondi EXPLAIN alla domanda.

    Annotazioni

    CREATE MATERIALIZED VIEW Le query dalle pipeline di Lakeflow potrebbero non funzionare EXPLAIN senza aggiornamento. Per esempio:

    • Le aspettative (CONSTRAINT...EXPECT clausole ) devono essere rimosse dalla query.
    • È possibile che i set di dati di origine debbano essere qualificati con un catalogo, uno schema o un altro percorso non necessario durante l'esecuzione nel contesto di una pipeline.

Esempi

I seguenti esempi mostrano l'output di una query idonea e di due query che non possono essere aggiornate incrementalmente.

Idonei al refresh incrementale

Una query che applica un filtro, una proiezione e un'aggregazione a una tabella Delta Lake è idonea:

EXPLAIN CREATE MATERIALIZED VIEW sales_summary AS
SELECT region, SUM(revenue) AS total_revenue, COUNT(*) AS order_count
FROM catalog.schema.orders
WHERE order_date >= '2024-01-01'
GROUP BY region;
== Incremental Update Eligibility ==
The Materialized View can be incrementally refreshed.

== Detailed Incrementalization Info ==
No issues detected.

Non idonei: utilizzi LIMIT

Una query che usa LIMIT non è incrementalizzabile, perché gli operatori di limite non possono essere mantenuti in modo incrementale:

EXPLAIN CREATE MATERIALIZED VIEW top_customers AS
SELECT customer_id, total_spend
FROM catalog.schema.customer_summary
ORDER BY total_spend DESC
LIMIT 100;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- OPERATOR_NOT_INCREMENTALIZABLE: Operators GlobalLimit, LocalLimit are not incrementalizable. Consider rewriting the query to avoid using them.

Non idoneo: sorgente non Delta Lake

Una query che legge da una sorgente non Delta Lake, come file CSV, non è incrementale:

EXPLAIN CREATE MATERIALIZED VIEW external_data AS
SELECT * FROM csv.`/path/to/files/`;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- INPUT_NOT_IN_DELTA: Tables are not in Delta format. Consider converting them to Delta tables.

Idoneità e comportamento in tempo reale

EXPLAIN riporta se la struttura della query supporta il refresh incrementale. Non prevede cosa fa l'ottimizzatore a runtime. Secondo il modello predefinito REFRESH POLICY AUTO, il modello di costi prende la decisione finale e può scegliere un ricalcolo completo anche per una vista materializzata idonea, ad esempio quando stima che il nesting dell'operatore o il volume di dati corrente rendano più efficiente un ricalcolo completo. Per l'elenco completo delle politiche di aggiornamento, vedi Politica di aggiornamento.

Se una visualizzazione materializzata idonea utilizza costantemente il ricalcolo completo sotto AUTO, puoi:

  • Imposta REFRESH POLICY INCREMENTAL per preferire il refresh incrementale rispetto alla scelta basata sui costi. Per la sintassi, vedi REFRESH clausola POLICY.
  • Controlla il log degli eventi della pipeline per INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL gli eventi, così da capire perché il modello di costi ha rifiutato il piano incrementale. Per dettagli, vedi Pipeline event log e i CostModelRejectionSubType valori nello schema del log eventi Pipeline.

Le ragioni comuni di rifiuto del modello di costo includono:

  • EXCESSIVE_OPERATOR_NESTING: La definizione della query è complessa e presenta molti livelli di annidamento degli operatori, che il modello di costo considera rischiosi per l'elaborazione incrementale.
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED e TABLE_SIZE_THRESHOLD_EXCEEDED: Il modello di costi stima che un ricalcolo completo sia più economico per il volume dati attuale.

Un rifiuto del modello di costo non significa che la visione materializzata non possa incrementalizzarsi. Significa che l'ottimizzatore ha scelto di non farlo. L'impostazione REFRESH POLICY INCREMENTAL è un modo supportato per superare quella scelta.