Поддержка функций: асинхронные материализованные представления

Асинхронные материализованные представления поддерживаются, начиная с StarRocks v2.4. Они предназначены для ускорения сложных запросов с JOIN и агрегациями по большим таблицам как в StarRocks, так и в Data Lake. Разница в производительности особенно заметна при частом выполнении запроса или его высокой сложности. Кроме того, асинхронные MV полезны для построения математических моделей поверх вашего хранилища данных.

Этот документ описывает границы применимости асинхронных MV и версии, начиная с которых поддерживаются соответствующие возможности.

DDL Features

Feature

Description

Supported Version(s)

Auto Analyze

Автоматический сбор статистики после создания MV во избежание сбоев переписывания запросов.

v3.0+

Random Bucketing

По умолчанию включает стратегию случайного «раскладывания по бакетам» для MV.

v3.1+

Deferred Refresh

Позволяет указать, нужно ли обновлять MV сразу после создания, с помощью ключевых слов DEFERRED или IMMEDIATE в CREATE MATERIALIZED VIEW.

v3.0+

Order By

Возможность задавать сортировочный ключ для MV с помощью ORDER BY.

v3.1+

Window/CTE/Union/Subquery

Поддержка оконных функций, CTE, UNION и подзапросов в MV.

v2.5+

ALTER ACTIVE

Активация невалидных MV после изменений схемы базовых таблиц с помощью ключевого слова ACTIVE в ALTER MATERIALIZED VIEW.

v2.5.7+
v3.0.1+
v3.1+

REFRESH SYNC MODE

Синхронное выполнение задач обновления MV с помощью ключевых слов WITH SYNC MODE в REFRESH MATERIALIZED VIEW.

v2.5.8+
v3.0.4+
v3.1+

Intermediate Result Spilling

Включение «Spill» промежуточных результатов с помощью свойства enable_spill, чтобы избежать OOM при построении MV.

v3.1+

Resource Group

Указание ресурсной группы свойством resource_group для изоляции ресурсов при построении MV.

v3.1+

Materialized View on View

Создание MV на основе логических представлений (View).

v3.1+

Swap Materialized View

Атомарная замена MV с помощью ключевых слов SWAP WITH в ALTER MATERIALIZED VIEW.

v3.1+

CREATE INDEX ON Materialized View

Создание индексов на MV для ускорения точечных запросов.

v3.0.7+
v3.1.4+
v3.2+

AUTO ACTIVE

Фоновая автоматическая активация невалидных MV с экспоненциальной задержкой (остановка после достижения 60 минут).

v3.1.4+
v3.2+

Backup and Restore

Поддержка Backup и Restore для MV.

v3.2+

Object Dependencies

Системное представление sys.object_dependencies для прояснения зависимостей между MV и базовыми таблицами.

v3.2+

Variables

Variable

Description

Default

Supported Version(s)

enable_materialized_view_rewrite

Включение переписывания запросов с использованием MV.

true

v2.5+

enable_materialized_view_for_insert

Включение переписывания запросов для операторов INSERT.

false

v2.5.18+
v3.0.9+
v3.1.7+
v3.2.2+

materialized_view_rewrite_mode

Режим переписывания запросов с использованием MV.

DEFAULT

v3.2+

optimizer_materialized_view_timelimit

Максимальное время, отведенное на переписывание запроса через MV; по истечении этого времени переписывание прекращается, и продолжается обычная оптимизация.

1000

v3.1.9+
v3.2.5+

analyze_mv

Метод сбора статистики после обновления MV.

SAMPLE

v3.0+

enable_materialized_view_plan_cache

Включение кэша планов для MV. По умолчанию кэшируется 1000 планов.

TRUE

v2.5.13+
v3.0.7+
v3.1.4+
v3.2.0+
v3.3.0+

query_including_mv_names

Белый список MV, которые разрешено использовать для переписывания запроса.

v3.1.11+
v3.2.5+

query_excluding_mv_names

Черный список MV, которые запрещено использовать для переписывания запроса.

v3.1.11+
v3.2.5+

cbo_materialized_view_rewrite_related_mvs_limit

Максимальное число кандидатов MV на этапе планирования.

64

v3.1.9+
v3.2.5+

Properties

Property

Description

Supported Version(s)

session.<property_name>

Префикс сессионных переменных, используемых при построении MV, например, session.insert_timeout и session.query_mem_limit.

v3.4+

auto_refresh_partitions_limit

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

v2.5+

excluded_trigger_tables

Базовые таблицы, изменения в которых не будут триггерить автoобновление MV.

v2.5+

partition_refresh_number

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

v2.5+

partition_ttl_number

Количество «последних» партиций MV, сохраняемых в актуальном состоянии.

v2.5+

partition_ttl

Время жизни (TTL) партиций MV. Рекомендуется вместо partition_ttl_number.

v3.1.4+
v3.2+

force_external_table_query_rewrite

Включение переписывания запросов для MV, построенных на внешних каталогах.

v2.5+

query_rewrite_consistency

Правило согласованности данных при переписывании запросов для MV на внутренних таблицах.

v3.0.5+
v3.1+

resource_group

Ресурсная группа, к которой относятся задачи обновления MV.

v3.1+

colocate_with

Группа коллокации для MV.

v3.1+

foreign_key_constraints

Ограничения внешних ключей при создании MV для переписывания запросов в сценарии View Delta Join.

v2.5.4+
v3.0+

unique_constraints

Ограничения уникальности при создании MV для переписывания запросов в сценарии View Delta Join.

v2.5.4+
v3.0+

mv_rewrite_staleness_second

Допустимая «устарелость» данных MV при переписывании запросов.

v3.1+

enable_query_rewrite

Разрешено ли использовать MV для переписывания запросов.

v3.3+

excluded_refresh_tables

Базовые таблицы, данные которых не синхронизируются при обновлении MV.

v3.3+

Partitioning

Alignment

Use Case

Supported Version(s)

Выравнивание партиций «один к одному» (типы DATE)

Создание MV, чьи партиции один‑к‑одному соответствуют партициям базовой таблицы при одинаковом ключе партиционирования. Ключ должен иметь тип DATE или DATETIME.

v2.5+

Выравнивание партиций «один к одному» (тип STRING)

Создание MV, чьи партиции один‑к‑одному соответствуют партициям базовой таблицы при одинаковом ключе партиционирования. Ключ должен иметь тип STRING.

v3.1.4+
v3.2+

Выравнивание с укрупнением по времени (типы DATE)

Создание MV с более крупной временной гранулярностью партиционирования, чем у базовой таблицы, с использованием функции date_trunc над ключом партиционирования. Ключ должен иметь тип DATE или DATETIME.

v2.5+

Выравнивание с укрупнением по времени (тип STRING)

Создание MV с более крупной временной гранулярностью партиционирования, чем у базовой таблицы, с использованием date_trunc над ключом типа STRING.

v3.1.4+
v3.2+

Пользовательская временная гранулярность

Создание MV с произвольно заданной временной гранулярностью партиций с помощью date_trunc совместно с time_slice или date_slice.

v3.2+

Выравнивание с несколькими базовыми таблицами

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

v3.3+

Выравнивание нескольких столбцов партиционирования

Задание нескольких столбцов партиционирования для MV с отображением «один к одному» на столбцы партиционирования базовых таблиц.

v3.5+

Different Join Methods

  • Single Fact Table (v2.4+): Создание соответствия партиций между MV и факт‑таблицей обеспечивает автоматическое обновление партиций MV при обновлении факт‑таблицы.

  • Multiple Fact Tables (v3.3+): Создание соответствия партиций между MV и несколькими факт‑таблицами, объединяемыми или объединяемыми UNION на одинаковой временной гранулярности, обеспечивает автoобновление партиций MV при обновлении любой факт‑таблицы.

  • Temporal Dimension Table (v3.3+): Если таблица размерностей хранит исторические версии и партиционирована по заданной временной гранулярности, а факт‑таблица объединяется с ней на той же гранулярности, выравнивание партиций MV и по факт‑таблице, и по таблице размерностей обеспечивает автoобновление при изменении любой из них.

MV на внешних каталогах

External Data Source

Supported Scenario and Version(s)

Stable Version(s)

Hive

  • Непартиционированные таблицы: v2.5.4 & v3.0+
  • Партиции типов DATE и DATETIME: v2.5.4 & v3.0+
  • Преобразование ключа партиционирования типа STRING в DATE: v3.1.4 & v3.2+
  • MV на Hive View: планируется
  • Многоуровневое партиционирование: планируется

v2.5.13+
v3.0.6+
v3.1.5+
v3.2+

Iceberg

  • Непартиционированные таблицы: v3.0+
  • Партиции типов DATE и DATETIME: v3.1.4 & v3.2+
  • Преобразование ключа партиционирования типа STRING в DATE: v3.1.4 & v3.2+
  • MV на Iceberg View: планируется
  • Partition Transform: v3.2.3
  • Partition-level refresh: v3.1.7 & v3.2.3
  • Многоуровневое партиционирование: v3.5+

v3.1.5+
v3.2+

Hudi

  • Непартиционированные таблицы: v3.2+
  • Партиции типов DATE и DATETIME: v3.2+
  • Многоуровневое партиционирование: планируется

Not Stable

Paimon

  • Непартиционированные таблицы: v2.5.4 & v3.0+
  • Партиции типов DATE и DATETIME: планируется
  • Многоуровневое партиционирование: планируется

Not Stable

DeltaLake

  • Непартиционированные таблицы: v3.2+
  • Партиционированные таблицы: планируется
  • Многоуровневое партиционирование: планируется

Not Stable

JDBC

  • Непартиционированные таблицы: v3.0+
  • Партиционированные таблицы: MySQL RangeColumn Partition v3.1.4

Not Stable

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

Query Rewrite

Feature

Description

Supported Version(s)

Single Table Rewrite

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

v2.5+

Inner Join Rewrite

Переписывание запросов для INNER/CROSS JOIN на внутренних таблицах.

v2.5+

Aggregate Rewrite

Переписывание запросов для JOIN с базовыми агрегациями.

v2.5+

UNION Rewrite

Компенсация предикатов UNION и партиций UNION на внутренних таблицах.

v2.5+

Nested Materialized View Rewrite

Переписывание запросов с использованием вложенных MV на внутренних таблицах.

v2.5+

Count Distinct Rewrite (bitmap/hll)

Переписывание COUNT DISTINCT в расчеты на основе bitmap или HLL.

v2.5.6+
v3.0+

View Delta Join Rewrite

Переписывание запросов, объединяющих подмножество таблиц из объединения, определенного в MV.

v2.5.4+
v3.0+

Join Derivability Rewrite

Переписывание между разными типами соединений.

v2.5.8+
v3.0.4+
v3.1+

Full Outer Join and Other Joins

Переписывание для FULL OUTER JOIN, SEMI JOIN и ANTI JOIN.

v3.1+

Avg to Sum/Count Rewrite

Переписывание avg() в sum() / count().

v3.1+

View-based Rewrite

Переписывание запросов с использованием MV, построенных поверх View, без транскрибирования запроса к View в запросы к ее базовым таблицам.

v3.2.2+

Count Distinct Rewrite (ArrayAgg)

Переписывание COUNT DISTINCT в вычисления с функцией array_agg_distinct.

v3.2.5+
v3.3+

Text-based Query Rewrite

Переписывание запроса, абстрактное синтаксическое дерево которого идентично определению MV.

v3.3+

Diagnostic Features

Feature

Usage Scenario

Supported Version(s)

TRACE REWRITE

Диагностика проблем переписывания с помощью оператора TRACE REWRITE.

v2.5.10+
v3.0.5+
v3.1+

Query Dump

Сброс сведений о MV в момент его использования.

v3.1+

Refresh Audit Log

Запись SQL в Audit Log при обновлении MV.

v2.5.8+
v3.0.3+
v3.1+

Hit Audit Log

Запись в Audit Log сведений о «попавшем» MV и кандидатах при переписывании запроса в MV.

v3.1.4+
v3.2+

Monitoring Metrics

Специализированные метрики мониторинга для MV.

v3.1.4+
v3.2+