AggregatingMergeTree
Движок наследует функциональность MergeTree, изменяя логику слияния кусков данных. Все строки с одинаковым первичным ключом (точнее, с одинаковым ключом сортировки) ClickHouse заменяет на одну (в пределах одного куска данных), которая хранит объединение состояний агрегатных функций.
Таблицы типа AggregatingMergeTree
могут использоваться для инкрементальной агрегации данных, в том числе, для агрегирующих материализованных представлений.
Движок обрабатывает все столбцы типа AggregateFunction.
Использование AggregatingMergeTree
оправдано только в том случае, когда это уменьшает количество строк на порядки.
Создание таблицы
Описание параметров запроса смотрите в описании запроса.
Секции запроса
При создании таблицы AggregatingMergeTree
используются те же секции, что и при создании таблицы MergeTree
.
Устаревший способ создания таблицы
Не используйте этот способ в новых проектах и по возможности переведите старые проекты на способ описанный выше.
Все параметры имеют то же значение, что в и MergeTree
.
SELECT/INSERT данных
Для вставки данных используйте INSERT SELECT
с агрегатными -State
-функциями.
При выборке данных из таблицы AggregatingMergeTree
, используйте GROUP BY
и те же агрегатные функции, что и при вставке данных, но с суффиксом -Merge
.
В запросах SELECT
значения типа AggregateFunction
выводятся во всех форматах, которые поддерживает ClickHouse, в виде implementation-specific бинарных данных. Если с помощью SELECT
выполнить дамп данных, например, в формат TabSeparated
, то потом этот дамп можно загрузить обратно с помощью запроса INSERT
.
Пример агрегирущего материализованного представления
Создаём материализованное представление типа AggregatingMergeTree
, следящее за таблицей test.visits
:
Вставляем данные в таблицу test.visits
:
Данные окажутся и в таблице и в представлении test.basic
, которое выполнит агрегацию.
Чтобы получить агрегированные данные, выполним запрос вида SELECT ... GROUP BY ...
из представления test.basic
: