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
:
Теперь мы видим правильные средние значения: