Перейти к основному содержимому
Перейти к основному содержимому

Тип AggregateFunction

Описание

Все агрегатные функции в ClickHouse имеют промежуточное состояние, зависящее от реализации, которое может быть сериализовано в тип данных AggregateFunction и храниться в таблице. Это обычно происходит с помощью материализованного представления.

Существует два объединителя агрегатных функций combinators, которые обычно используются с типом 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.