EXPLAIN CREATE MATERIALIZED VIEW

Dotyczy:zaznaczone jako tak Databricks SQL zaznaczone jako tak Databricks Runtime 17.3 lub nowszy

Raportuje, czy zapytanie dla zmaterializowanego widoku może być stopniowo odświeżane. Przygotuj EXPLAIN do oświadczenia CREATE MATERIALIZED VIEW , aby sprawdzić kwalifikację inkrementalizacji przed utworzeniem zmaterializowanego widoku lub uruchomieniem kosztownego odświeżenia.

Aby dowiedzieć się więcej na temat przyrostowego odświeżania zmaterializowanych widoków, zobacz Odświeżanie przyrostowe dla zmaterializowanych widoków.

Jakie raporty EXPLAIN

EXPLAIN CREATE MATERIALIZED VIEW sprawdza, czy zapytanie strukturalnie kwalifikuje się do odświeżania przyrostowego. Sekcja Incremental Update Eligibility wyników raportuje jeden z dwóch wyników:

  • The Materialized View can be incrementally refreshed: Wzorzec zapytań obsługuje odświeżanie przyrostowe.
  • The Materialized View cannot be incrementally refreshed: Zapytanie nie kwalifikuje się strukturalnie do odświeżania przyrostowego. W ramach AUTO polityk i FULL refresh widok materializowany wykorzystuje pełne przeobliczenie. Poniżej INCREMENTAL lub INCREMENTAL STRICT, nie wypada z CREATE powodu inkrementalnego odświeżania (incremental refresh). Sekcja wymienia Detailed Incrementalization Info , co zapobiega inkrementalizacji.

Kwalifikacja strukturalna nie gwarantuje, że odświeżenie stopniowe przebiegnie. W domyślnej AUTO polityce odświeżania model kosztów podejmuje ostateczną decyzję w czasie wykonywania i nadal może wybrać pełne przeobliczenie dla uprawnionego zmaterializowanego widoku. Szczegóły można znaleźć w artykule Uprawnienia i zachowanie w czasie działania.

Kiedy używać atrybutu EXPLAIN

Uruchom EXPLAIN CREATE MATERIALIZED VIEW:

  • Przed wdrożeniem nowego zmaterializowanego widoku, aby sprawdzić, czy wzorzec zapytań obsługuje odświeżanie przyrostowe.
  • Podczas debugowania powolnych odświeżań, aby potwierdzić, że zmaterializowany widok jest kwalifikacyjny. Jeśli nie, przepisz zapytanie.
  • Po przepisaniu zapytania, aby zweryfikować, czy nowa wersja kwalifikuje się.
  • Gdy przechodzisz z DBT lub innego narzędzia, warto zweryfikować, czy przekształcone zapytania korzystają z odświeżania stopniowo.

Składnia

EXPLAIN [CREATE MATERIALIZED VIEW query]

Parametry

  • query

    Zapytanie SQL, które tworzy zmaterializowany widok. Wstęp EXPLAIN do zapytania.

    Uwaga / Notatka

    CREATE MATERIALIZED VIEW zapytania z potoków lakeflow mogą nie działać EXPLAIN bez aktualizacji. Przykład:

    • Oczekiwania (CONSTRAINT...EXPECT klauzule) muszą zostać usunięte z zapytania.
    • Zestawy danych źródłowych mogą być kwalifikowane przy użyciu katalogu, schematu lub innej ścieżki, która nie jest potrzebna w przypadku uruchamiania w kontekście potoku.

Przykłady

Poniższe przykłady pokazują wyniki dla uprawnionego zapytania oraz dla dwóch zapytań, których nie można odświeżać stopniowo.

Kwalifikuje się do stopniowego odświeżania

Zapytanie, które stosuje filtr, projekcję i agregację do tabeli Delta Lake, jest uprawnione:

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.

Niekwalifikowalny: zastosowania LIMIT

Zapytanie, które używa, LIMIT nie jest inkrementalne, ponieważ operatorów granicznych nie można utrzymywać inkrementalnie:

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.

Nie kwalifikuje się: źródło z jeziora niepochodzącego z Delta

Zapytanie odczytujące z nie-Delta Lake, takie jak pliki CSV, nie jest inkrementalizowane:

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.

Uprawnienia i zachowanie w czasie wykonywania

EXPLAIN raportuje, czy struktura zapytań obsługuje odświeżanie przyrostowe. Nie przewiduje, co robi optymalizator w czasie działania. W domyślnym REFRESH POLICY AUTO, model kosztów podejmuje ostateczną decyzję i może wybrać pełne przeobliczenie nawet dla odpowiedniego widoku materializowanego, na przykład gdy oszacuje, że zagnieżdżanie operatorów lub bieżąca objętość danych czynią pełne przeobliczenie bardziej efektywnym. Pełną listę polityk odświeżania można znaleźć w artykule Polityka odświeżania.

Jeśli odpowiedni zmaterializowany widok konsekwentnie wykorzystuje pełne przeobliczenie pod , AUTOmożesz:

  • Ustaw REFRESH POLICY INCREMENTAL tak, by preferować stopniowe odświeżanie zamiast wyboru opartego na kosztach. W składni zobacz REFRESH klauzulę POLICY.
  • Sprawdź dziennik zdarzeń pipeline pod kątem INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL zdarzeń, aby zrozumieć, dlaczego model kosztów odrzucił plan przyrostowy. Szczegóły można znaleźć w artykule Pipeline event log oraz CostModelRejectionSubType wartości w schemacie Pipeline event log.

Typowe powody odrzucenia modelu kosztów to:

  • EXCESSIVE_OPERATOR_NESTING: Definicja zapytania jest złożona i zawiera wiele poziomów zagnieżdżania operatorów, co model kosztowy uznaje za ryzykowne dla przetwarzania przyrostowego.
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED oraz TABLE_SIZE_THRESHOLD_EXCEEDED: Model kosztów szacuje, że pełne przeobliczenie jest tańsze przy obecnym wolumenie danych.

Odrzucenie modelu kosztowego nie oznacza, że zmaterializowany widok nie może się inkrementalizować. To oznacza, że optymalizator zdecydował się tego nie robić. Setting REFRESH POLICY INCREMENTAL to wspierany sposób na obejście tego wyboru.