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

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:

Теперь мы видим правильные средние значения:

См. также