Тип 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.
Существует специальный параметр уровня сессии aggregate_function_input_format, который позволяет формировать состояние из входных значений.
Он поддерживает следующие форматы:
state— двоичная строка с сериализованным состоянием (значение по умолчанию). Если вы выгружаете данные, например, в форматTabSeparatedс помощью запросаSELECT, то этот дамп можно загрузить обратно с помощью запросаINSERT.value— формат будет ожидать одно значение аргумента агрегатной функции или, в случае нескольких аргументов, кортеж из них; это значение будет десериализовано для формирования соответствующего состояния.array— формат будет ожидать Array значений, как описано в вариантеvalueвыше; все элементы массива будут агрегированы для формирования состояния.
Выборка данных
При выборке данных из таблицы AggregatingMergeTree используйте предложение GROUP BY
и те же агрегатные функции, что и при вставке данных, но с комбинатором
-Merge.
Агрегатная функция с добавленным комбинатором -Merge принимает набор
состояний, объединяет их и возвращает результат полной агрегации данных.
Например, следующие два запроса возвращают один и тот же результат:
Пример использования
См. описание табличного движка AggregatingMergeTree.
Связанные материалы
- Запись в блоге: Использование агрегатных комбинаторов в ClickHouse
- MergeState комбинатор MergeState.
- State комбинатор State.