Движок AggregatingMergeTree наследует от MergeTree и изменяет логику слияния фрагментов данных. ClickHouse заменит все строки с одним и тем же первичным ключом (точнее, ключом сортировки) внутри фрагмента данных в одну строку, которая будет хранить статус ряда агрегатных функций.
Таблицу AggregatingMergeTree можно использовать для статистического агрегирования дополнительных данных, включая агрегирование данных материализованных представлений.
Для обработки всех столбцов движок использует следующие типы:
AggregatingMergeTree подходит для ситуаций, когда количество строк можно уменьшить по определенным правилам.
CREATE TABLE [IF NOT EXISTS] [db.]table\_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = AggregatingMergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[TTL expr]
[SETTINGS name=value, ...]
AggregatingMergeTreeПараметры таблицы иMergeTreeтаблица соответствует。MergeTreeДля анализа механизма таблицы см.ClickHouse(09) Подробный анализ MergeTree дерева слияния ClickHouse Механизм таблиц семейства MergeTree
Чтобы вставить данные, используйте оператор INSERT или SELECT с агрегатной функцией -State-. При запросе данных из таблицы AggregatingMergeTree необходимо использовать предложение GROUP BY и использовать ту же агрегатную функцию, что и при вставке, но суффикс следует изменить на -Merge.
Для результатов запросов SELECT значения типа AggregateFunction реализуют определенное двоичное представление для всех выходных форматов ClickHouse. При выполнении дампа данных, например, с использованием формата TabSeparated для запроса SELECT, выгруженные данные также можно напрямую импортировать обратно с помощью инструкции INSERT.
Например, следующий пример.
-- Создайте материализованное представление AggregatingMergeTree.
CREATE MATERIALIZED VIEW test.basic
ENGINE = AggregatingMergeTree() PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate)
AS SELECT
CounterID,
StartDate,
sumState(Sign) AS Visits,
uniqState(UserID) AS Users
FROM test.visits
GROUP BY CounterID, StartDate;
--К test.visits Вставьте данные в таблицу, данные будут вставлены в таблицу и представление одновременно, а представление test.basic Данные внутри будут агрегированы.
INSERT INTO test.visits ...
-- Чтобы получить агрегированные данные, вам необходимо выполнить SELECT, аналогичный представлению test.basic. ... GROUP BY ...такой запрос
SELECT
StartDate,
sumMerge(Visits) AS Visits,
uniqMerge(Users) AS Users
FROM test.basic
GROUP BY StartDate
ORDER BY StartDate;
Наконец, давайте подведем итог логике обработки AggregatingMergeTree.
https://cloud.tencent.com/developer/column/96434?from_column=20421&from=20421
Исходная статья:ClickHouse(12) Подробный анализ AggregatingMergeTree в механизме таблиц семейства MergeTree дерева слияния ClickHouse