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