Комбинатор 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 г.