EXPLAIN CREATE MATERIALIZED VIEW

Применяется к:отмечено галочкой да Databricks SQL отмечено галочкой да Databricks Runtime 17.3 и более поздним версиям

Сообщает, можно ли постепенно обновлять запрос для материализированного вида. Подготовьте EXPLAINCREATE MATERIALIZED VIEW к утверждению, чтобы проверить право на инкрементализацию перед созданием материализованного изображения или запуском дорогого обновления.

Чтобы узнать о инкрементализации материализованных представлений, см. раздел инкрементальное обновление для материализованных представлений.

Какие EXPLAIN отчёты

EXPLAIN CREATE MATERIALIZED VIEW проверяет, подходит ли запрос структурно для постепенного обновления. Раздел результатов содержит Incremental Update Eligibility один из двух результатов:

  • The Materialized View can be incrementally refreshed: Шаблон запроса поддерживает постепенное обновление.
  • The Materialized View cannot be incrementally refreshed: Запрос структурно не подходит для инкрементального обновления. В политике AUTO и FULL обновления материализованный вид использует полный перевычисление. Ниже INCREMENTAL или INCREMENTAL STRICT, CREATE не работает, потому что постепенное обновление невозможно. В разделе перечислены то, что препятствует Detailed Incrementalization Info инкрементализации.

Структурная пригодность не гарантирует постепенное обновление. Согласно стандартной AUTO политике обновления, модель стоимости принимает окончательное решение во время выполнения и при этом может выбрать полное перевычисление для допустимого материализованного вида. Для подробностей см . раздел «Допустимость и поведение во время выполнения».

Когда следует использовать EXPLAIN

Запустите EXPLAIN CREATE MATERIALIZED VIEW.

  • Перед развертыванием нового материализованного представления убедитесь, поддерживает ли шаблон запроса инкрементальное обновление.
  • Когда вы отлаждаете медленные обновления, чтобы убедиться, что материализованный вид допустим. Если нет, перепишите запрос.
  • После переписывания запроса, чтобы убедиться, подходит ли новая версия.
  • Когда вы переходите с DBT или другого инструмента, чтобы убедиться, что трансформированные запросы получают преимущество от постепенного обновления.

Синтаксис

EXPLAIN [CREATE MATERIALIZED VIEW query]

Параметры

  • query

    SQL-запрос, создающий материализованное представление. Подготовка EXPLAIN к запросу.

    Замечание

    CREATE MATERIALIZED VIEW Запросы из конвейеров Lakeflow могут не работать без EXPLAIN обновления. Рассмотрим пример.

    • Ожидания (CONSTRAINT...EXPECT предложения) должны быть удалены из запроса.
    • Исходные наборы данных могут быть квалифицированы с помощью каталога, схемы или другого пути, который не нужен при выполнении в контексте конвейера.

Примеры

Следующие примеры показывают результат для допустимого запроса и для двух запросов, которые нельзя обновить постепенно.

Право на постепенное обновление

Запрос, применяющий фильтр, проекцию и агрегацию к таблице Delta Lake, подходит для применения:

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.

Не допускается: использование LIMIT

Запрос, использующий LIMIT , не является инкрементализируемым, поскольку операторы предела не поддерживаются инкрементально:

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.

Не подходит: источник не из Дельта-Лейк

Запрос, который читается из источника, не относящегося к Delta Lake, например CSV-файлы, не подлежит инкрементализации:

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.

Допустимость и поведение во время выполнения

EXPLAIN сообщает, поддерживает ли структура запроса инкрементальное обновление. Он не предсказывает, что делает оптимизатор во время выполнения. По умолчанию REFRESH POLICY AUTOмодель затрат принимает окончательное решение и может выбрать полное перевычисление даже для допустимого материализированного вида, например, когда она оценивает, что вложенность операторов или текущий объём данных делают полное перевычисление более эффективным. Полный список политик обновления см. Политика обновления.

Если допустимый материализированный вид постоянно использует полный перевычислитель в AUTO, вы можете:

  • Настройте REFRESH POLICY INCREMENTAL на постепенное обновление вместо варианта, основанного на стоимости. Для синтаксиса см. REFRESH пункт POLICY.
  • Проверьте журнал событий конвейера на предмет INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL событий, чтобы понять, почему модель затрат отклонила инкрементальный план. Для подробностей см. журнал событий конвейера и CostModelRejectionSubType значения в схеме журнала событий конвейера.

Распространённые причины отказа от модели затрат включают:

  • EXCESSIVE_OPERATOR_NESTING: Определение запроса сложно и содержит множество уровней вложения операторов, что по модели затрат считает рискованным для инкрементальной обработки.
  • CHANGESET_SIZE_THRESHOLD_EXCEEDED и TABLE_SIZE_THRESHOLD_EXCEEDED: Модель затрат оценивает, что полное перевычисление дешевле для текущего объёма данных.

Отказ от модели затрат не означает, что материализованный взгляд не может постепенно увеличиваться. Это значит, что оптимизатор решил этого не делать. Настройка REFRESH POLICY INCREMENTAL — это поддерживаемый способ преодолеть этот выбор.