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

Описание

Комбинатор State можно применить к функции avg, чтобы получить промежуточное состояние типа AggregateFunction(avg, T), где T — указанный тип значения, для которого вычисляется среднее.

Пример использования

В этом примере рассмотрим, как использовать тип AggregateFunction вместе с функцией avgState для агрегации данных о трафике веб-сайта. Сначала создайте исходную таблицу для данных о трафике веб-сайта:
Создайте агрегирующую таблицу для хранения средних значений времени отклика. Обратите внимание, что avg не может использовать тип SimpleAggregateFunction, так как требует сложного состояния (суммы и счётчика). Поэтому используем тип AggregateFunction:
Создайте incremental materialized view, который будет выступать в роли триггера вставки для новых данных и сохранять промежуточные данные состояния в целевой таблице, определённой выше:
Вставьте начальные данные в исходную таблицу, создав кусок на диске:
Вставьте ещё немного данных, чтобы создать вторую часть на диске:
Изучите целевую таблицу page_performance:
Обратите внимание, что столбец avg_response_time имеет тип AggregateFunction(avg, UInt32) и хранит промежуточные данные состояния. Также обратите внимание, что данные строки для avg_response_time не несут полезной информации — вместо них отображаются странные символы, например �, n, F, }. Это попытка терминала отобразить бинарные данные в виде текста. Причина в том, что типы AggregateFunction хранят своё состояние в бинарном формате, оптимизированном для эффективного хранения и вычислений, а не для восприятия человеком. Это бинарное состояние содержит всю информацию, необходимую для вычисления среднего значения. Чтобы воспользоваться им, используйте комбинатор Merge:
Теперь мы видим корректные средние значения:

См. также

Последнее изменение 3 июля 2026 г.