Тип AggregateFunction
Описание
Все Агрегатные функции в ClickHouse имеют
между состоянием, специфичный для реализации, который может быть сериализован в тип данных AggregateFunction
и сохранен в таблице. Обычно это делается с помощью материализованного представления.
Существует два агрегатных функции комбинатора, которые обычно используются с типом AggregateFunction
:
- Комбинатор
-State
агрегационной функции, который, когда добавляется к имени агрегатной функции, производит промежуточные состоянияAggregateFunction
. - Комбинатор
-Merge
агрегационной функции, который используется для получения окончательного результата агрегации из промежуточных состояний.
Синтаксис
Параметры
aggregate_function_name
- Имя агрегатной функции. Если функция является параметрической, то ее параметры также должны быть указаны.types_of_arguments
- Типы аргументов агрегатной функции.
например:
Использование
Вставка данных
Для вставки данных в таблицу с колонками типа AggregateFunction
можно использовать INSERT SELECT
с агрегатными функциями и
комбинатором -State
агрегатной функции.
Например, для вставки в колонки типа AggregateFunction(uniq, UInt64)
и
AggregateFunction(quantiles(0.5, 0.9), UInt64)
вы бы использовали следующие
агрегатные функции с комбинаторами.
В отличие от функций uniq
и quantiles
, uniqState
и quantilesState
(с добавленным комбинатором -State
) возвращают состояние, а не окончательное значение.
Другими словами, они возвращают значение типа AggregateFunction
.
В результатах запроса SELECT
значения типа AggregateFunction
имеют
специфичные для реализации бинарные представления для всех форматов вывода ClickHouse.
Если вы сбрасываете данные, например, в формате TabSeparated
с помощью запроса SELECT
, то этот сброс может быть загружен обратно с помощью запроса INSERT
.
Выбор данных
При выборе данных из таблицы AggregatingMergeTree
используйте оператор GROUP BY
и те же агрегатные функции, что и при вставке данных, но используйте
комбинатор -Merge
.
Агрегатная функция с добавленным комбинатором -Merge
берет набор
состояний, комбинирует их и возвращает результат полной агрегации данных.
Например, следующие два запроса возвращают одинаковый результат:
Пример использования
Смотрите описание двигателя AggregatingMergeTree.
Связанный контент
- Блог: Использование агрегатных комбинаторов в ClickHouse
- Комбинатор MergeState.
- Комбинатор State.