Перейти к содержимому
Последнее обновление

Прозрачное переписывание с помощью синхронных материализованных представлений

Синхронное материализованное представление (Sync-Materialized View) — это таблица с предварительно вычисленными данными, в которой хранятся результаты заранее заданного оператора SELECT. Оно позволяет анализировать исходные детальные данные по произвольным измерениям и ускоряет запросы агрегации по фиксированным измерениям.

При выполнении запроса Doris автоматически подбирает оптимальное материализованное представление и читает данные непосредственно из него. Весь процесс прозрачен для пользователя и называется «прозрачным переписыванием». При изменении данных в базовой таблице Doris автоматически поддерживает согласованность материализованного представления, без ручного вмешательства.

Предварительные требования​

  • Развёрнута Doris версии 2.0 или более поздней.
  • Уже существует базовая таблица с детальными данными, к которой регулярно выполняются запросы с фиксированной агрегацией.
  • У вас есть права на базу данных и таблицу, необходимые для создания материализованных представлений.
  • Доступна тестовая среда, в которой можно проверить использование представлений запросами перед вводом в эксплуатацию.

Сценарии применения​

Тип сценарияХарактерные особенности
Совместная работа с детальными данными и фиксированными измерениямиТребуется выполнять запросы как к детальным данным, так и к фиксированным агрегатам
Отсечение столбцов / строкЗапросы обращаются лишь к небольшой части столбцов или строк таблицы
Ресурсоёмкие операторыЗапросы содержат тяжёлые операции, например длительную агрегацию
Разные префиксные индексыДля ускорения фильтрации нужны разные префиксные индексы

Определение в одну строку: синхронное материализованное представление = таблица с предварительно агрегированными данными, согласованность которой поддерживается автоматически, + прозрачное переписывание с автоматическим подбором оптимального представления.

Примечания
  • В Doris 2.0 и более поздних версиях расширены возможности материализованных представлений. Перед вводом в эксплуатацию проверьте в тестовой среде, что целевые запросы могут использовать ожидаемое материализованное представление.
  • Избегайте создания нескольких материализованных представлений со схожей структурой для одной таблицы: они могут конфликтовать друг с другом, из-за чего запросы не смогут их использовать.

Пример: агрегация продаж по магазинам​

Предположим, есть таблица с детальными данными о продажах sales_records, в которой для каждой продажи записаны идентификатор транзакции, идентификатор продавца, идентификатор магазина, дата продажи и сумма транзакции. Распространённая аналитическая задача — агрегировать объём продаж по магазинам.

Следующие шаги позволяют создать материализованное представление store_amt, которое группирует данные по store_id и суммирует продажи, а затем проверить, что запросы прозрачно переписываются для использования этого представления.

Шаг 1: создание синхронного материализованного представления​

  • Цель: заранее вычислить результаты для запросов с агрегацией по магазинам.

  • Команда:

    CREATE MATERIALIZED VIEW store_amt AS
    SELECT store_id, SUM(sale_amt)
    FROM sales_records
    GROUP BY store_id;
  • Примечания: после отправки команды Doris асинхронно строит материализованное представление в фоновом режиме, не блокируя рабочие запросы.

Шаг 2: проверка хода построения​

  • Цель: убедиться, что построение материализованного представления завершено.

  • Команда:

    SHOW ALTER TABLE MATERIALIZED VIEW FROM db_name;
  • Примечания: когда поле State принимает значение FINISHED, представление store_amt успешно создано и может использоваться запросами.

Шаг 3: запуск прозрачного переписывания​

  • Цель: обеспечить автоматическое использование материализованного представления запросами с соответствующей структурой агрегации.

  • Команда:

    SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
  • Примечания: Doris автоматически подбирает store_amt и напрямую читает предварительно агрегированные данные, без необходимости изменять SQL.

Шаг 4: проверка использования материализованного представления​

  • Цель: убедиться, что прозрачное переписывание работает.

  • Команда:

    EXPLAIN SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
  • Примечания: посмотрите на конец плана выполнения. Если вы видите следующий фрагмент, запрос использует store_amt:

    TABLE: default_cluster:test.sales_records(store_amt), PREAGGREGATION: ON

Прозрачное переписывание и прямые запросы к базовой таблице​

Критерий сравненияПрямой запрос к базовой таблицеПрозрачное переписывание для использования синхронного материализованного представления
Источник данныхВычисления на основе детальных данных во время выполнения запросаПрямое чтение предварительно агрегированных результатов
Производительность запросов агрегацииСильно зависит от объёма данныхСущественно повышается
Затраты на переписывание SQLОтсутствуютОтсутствуют (автоматический подбор)
Согласованность данныхОбеспечивается естественным образомАвтоматически поддерживается Doris
Затраты на сопровождениеОтсутствуютТребуется планировать структуру представлений, чтобы избежать конфликтов

Часто задаваемые вопросы​

Почему мой запрос не использует материализованное представление?​

Распространённые причины:

  1. Материализованное представление ещё строится, и поле State пока не приняло значение FINISHED.
  2. Столбцы, агрегатные функции или ключи группировки запроса не соответствуют определению материализованного представления.
  3. Для одной базовой таблицы существует несколько материализованных представлений со схожей структурой, что вызывает конфликт и мешает переписыванию.

Как выяснить причину: используйте EXPLAIN, чтобы проверить информацию TABLE: ...(materialized view name) в конце плана выполнения и определить, какая таблица используется на самом деле.

Как проверить состояние построения материализованного представления?​

Выполните SHOW ALTER TABLE MATERIALIZED VIEW FROM db_name; и посмотрите на поле State:

  • PENDING / RUNNING: построение выполняется.
  • FINISHED: построение завершено, и представление может использоваться запросами.
  • CANCELLED: построение завершилось с ошибкой или было отменено. Выясните причину и создайте представление заново.

Можно ли создать несколько материализованных представлений для одной базовой таблицы?​

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

Нужно ли вручную синхронизировать данные с материализованным представлением?​

Нет. При изменении данных в базовой таблице Doris автоматически поддерживает согласованность материализованного представления.

Итоги​

  • Синхронное материализованное представление = таблица с предварительно агрегированными данными + автоматическое поддержание согласованности + прозрачное переписывание.
  • Подходит для сценариев, в которых запросы к детальным данным сочетаются с агрегацией по фиксированным измерениям.
  • После создания используйте EXPLAIN для проверки использования представлений и избегайте конфликтов между похожими представлениями.
  • Перед вводом в эксплуатацию проверьте в тестовой среде, что целевые запросы используют ожидаемые представления.