SELECT к целевой таблице выполняются быстро и с минимальными затратами ресурсов. Incremental views поддерживают все функции агрегации и хорошо масштабируются — вплоть до PB данных, — поскольку каждый запрос работает с небольшим свежим подмножеством вставляемого набора данных.
Refreshable materialized views, напротив, обновляются по расписанию. Эти views периодически заново выполняют полный запрос и перезаписывают результат в целевой таблице. Это похоже на materialized views в традиционных OLTP-базах данных, таких как Postgres.
Выбор между incremental и refreshable materialized views во многом зависит от характера запроса, частоты изменения данных и того, должны ли обновления view отражать каждую строку по мере ее вставки или допустимо периодическое обновление. Понимание этих компромиссов — ключ к проектированию производительных и масштабируемых materialized views в ClickHouse.
Когда использовать incremental materialized views
- Вам нужны результаты запросов в реальном времени, обновляемые при каждой вставке.
- Вы часто выполняете агрегацию или фильтрацию больших объёмов данных.
- Ваши запросы включают простые преобразования или агрегации в рамках одной таблицы.
Когда использовать refreshable materialized views
Итоги
- Вам нужны кэшированные результаты запросов, доступные мгновенно, и допустима небольшая задержка в актуальности данных.
- Вам нужен top N для результирующего набора запроса.
- Размер результирующего набора со временем не растет без ограничений. Иначе производительность целевого представления будет снижаться.
- Вы выполняете сложные JOIN или денормализацию с участием нескольких таблиц, где обновления нужны при изменении любой исходной таблицы.
- Вы строите батч-процессы, задачи денормализации или создаете зависимости между представлениями, аналогичные DAG в DBT.
Режимы APPEND и REPLACE
APPEND и REPLACE. Эти режимы определяют, как результат запроса представления записывается при его обновлении.
REPLACE — режим по умолчанию. При каждом обновлении представления предыдущее содержимое целевой таблицы полностью перезаписывается последним результатом запроса. Это подходит для сценариев, в которых представление всегда должно отражать актуальное состояние, например для кэширования результирующего набора.
APPEND, напротив, позволяет добавлять новые строки в конец целевой таблицы вместо замены её содержимого. Это открывает дополнительные сценарии использования, например сохранение периодических снимков. APPEND особенно полезен, когда каждое обновление соответствует отдельному моменту времени или когда требуется накапливать результаты за прошлые периоды.
Выбирайте режим APPEND, когда:
- Вы хотите сохранять историю предыдущих обновлений.
- Вы создаёте периодические снимки или отчёты.
- Вам нужно постепенно накапливать обновлённые результаты с течением времени.
REPLACE, когда:
- Вам нужен только самый актуальный результат.
- Устаревшие данные должны полностью отбрасываться.
- Представление отражает текущее состояние или используется для поиска по ключу.
APPEND можно найти при построении Medallion architecture.