EXPLAIN CREATE MATERIALIZED VIEW

Gäller för:kryss markerad ja Databricks SQL kryss markerad ja Databricks Runtime 17.3 och senare

Rapporterar om frågan om en materialiserad vy kan uppdateras stegvis. Förbered EXPLAIN på ett CREATE MATERIALIZED VIEW uttalande för att kontrollera inkrementaliseringsbehörighet innan du skapar den materialiserade vyn eller kör en dyr uppdatering.

För att lära sig om inkrementalisering av materialiserade vyer, se Inkrementell uppdatering för materialiserade vyer.

Vilka EXPLAIN rapporter

EXPLAIN CREATE MATERIALIZED VIEW Kontrollerar om frågan är strukturellt berättigad till inkrementell uppdatering. Avsnittet Incremental Update Eligibility med utdata rapporterar ett av två resultat:

  • The Materialized View can be incrementally refreshed: Frågemönstret stöder inkrementell uppdatering.
  • The Materialized View cannot be incrementally refreshed: Frågan är strukturellt inte berättigad till inkrementell uppdatering. Under och FULL uppdatera-policyerna AUTO använder den materialiserade vyn en fullständig omberäkning. Under INCREMENTAL eller INCREMENTAL STRICT, misslyckas eftersom CREATE inkrementell uppdatering inte är möjlig. Avsnittet Detailed Incrementalization Info listar vad som förhindrar inkrementellisering.

Strukturell behörighet är ingen garanti för att en inkrementell uppdatering genomförs. Under standarduppdateringspolicyn AUTO fattar kostnadsmodellen det slutgiltiga beslutet vid körning och kan fortfarande välja en fullständig omberäkning för en berättigad materialiserad vy. För detaljer, se Behörighet och körbeteende.

När du ska använda EXPLAIN

Kör EXPLAIN CREATE MATERIALIZED VIEW:

  • Innan du distribuerar en ny materialiserad vy, för att verifiera att frågemönstret stödjer inkrementell uppdatering.
  • När du felsöker långsam uppdateringar för att bekräfta att den materialiserade vyn är berättigad. Om det inte är det, skriv om frågan.
  • Efter att du skrivit om en fråga, för att verifiera att den nya versionen är berättigad.
  • När du migrerar från DBT eller något annat verktyg, för att validera att de transformerade frågorna gynnas av inkrementell uppdatering.

Syntax

EXPLAIN [CREATE MATERIALIZED VIEW query]

Parameterar

  • fråga

    En SQL-fråga som skapar en materialiserad vy. Inleda EXPLAIN frågan.

    Anmärkning

    CREATE MATERIALIZED VIEW frågor från Lakeflow-pipelines kanske inte fungerar med EXPLAIN utan uppdatering. Till exempel:

    • Förväntningar (CONSTRAINT...EXPECT -satser) måste tas bort från frågan.
    • Källdatauppsättningar kan behöva kvalificeras med en katalog, ett schema eller en annan sökväg som inte behövs när den körs i kontexten för en pipeline.

Examples

Följande exempel visar utdata för en berättigad fråga och för två frågor som inte kan uppdateras inkrementellt.

Berättigad till inkrementell uppdatering

En fråga som applicerar ett filter, projektion och aggregering på en Delta Lake-tabell är berättigad:

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.

Ej berättigad: användningsområden LIMIT

En fråga som använder LIMIT är inte inkrementaliserbar, eftersom gränsoperatorer inte kan underhållas inkrementellt:

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.

Ej berättigad: källa som inte är från Delta Lake

En fråga som läser från en icke-Delta Lake-källa, såsom CSV-filer, är inte inkrementellierbar:

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.

Behörighet och körbeteende

EXPLAIN rapporterar om frågestrukturen stödjer inkrementell uppdatering. Den förutspår inte vad optimeraren gör vid körning. Under standarden REFRESH POLICY AUTOfattar kostnadsmodellen det slutgiltiga beslutet och kan välja en fullständig omberäkning även för en berättigad materialiserad vy, till exempel när den uppskattar att operatorinbäddning eller den aktuella datavolymen gör en fullständig omberäkning mer effektiv. För hela listan över uppdateringspolicys, se Uppdateringspolicy.

Om en berättigad materialiserad vy konsekvent använder full omberäkning under AUTO, kan du:

  • Ställ REFRESH POLICY INCREMENTAL in att föredra inkrementell uppdatering framför kostnadsbaserad uppfräschning. För syntax, se REFRESH POLICY-klausulen.
  • Kontrollera pipeline-händelseloggen för INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL händelser för att förstå varför kostnadsmodellen avvisade den inkrementella planen. För detaljer, se Pipeline-händelselogg och värdena CostModelRejectionSubType i Pipeline-händelseloggschema.

Vanliga skäl till avslag på kostnadsmodeller inkluderar:

  • EXCESSIVE_OPERATOR_NESTING: Frågedefinitionen är komplex och har många nivåer av operatorinbäddning, vilket kostnadsmodellen anser vara riskfyllt för inkrementell bearbetning.
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED och TABLE_SIZE_THRESHOLD_EXCEEDED: Kostnadsmodellen uppskattar att en fullständig omberäkning är billigare för den aktuella datavolymen.

Ett avslag på kostnadsmodellen betyder inte att den materialiserade synen inte kan inkrementaliseras. Det betyder att optimeraren valde att inte göra det. Inställning REFRESH POLICY INCREMENTAL är ett stödjande sätt att åsidosätta det valet.