184 похожих чатов

Всем привет! У меня есть табличка с полем requests AggregateFunction(count),

которая прореживается с помощью ttl GROUP BY, в нем делаю SET requests = countMergeState(requests), но хочется получить не сумму, например за час, а среднее значение за этот час, как это можно сделать? Получается нужен некий avg в момент ttl group by?
Заранее спасибо за ответ

25 ответов

10 просмотров

https://www.perplexity.ai/search/5808c06d-b972-495c-aaae-ac0a5cf28731?s=u https://kb.altinity.com/altinity-kb-queries-and-syntax/ttl/ttl-group-by-examples/

-Merge сделайте

Stepan- Автор вопроса
Slach [altinity]
-Merge сделайте

У меня же AggregateFunction(count), а не avg, на нее нельзя avgMerge делать

Stepan- Автор вопроса
Slach [altinity]
avg(countMerge(count)) ?

Aggregate function countMerge(requests) is found inside another aggregate function in query: While processing countMerge(requests)

Stepan
Aggregate function countMerge(requests) is found i...

=( опс, а просто avg(countField) тоже ошибку возвращает?

Stepan- Автор вопроса

Illegal type AggregateFunction(count, UInt64) of argument for aggregate function avg

Stepan
Illegal type AggregateFunction(count, UInt64) of a...

а вот так? avg(finalizeAggregation(count))

Stepan- Автор вопроса
Slach [altinity]
а вот так? avg(finalizeAggregation(count))

Хм, я наверно вообще не так задал вопрос... У меня есть табличка AggregatingMergeTree с колонкой requests AggregateFunction(count), которую я делю на минуту (в запросе countMerge(requests)/60, чтобы получить RPS. Также в этой табличке есть ttl GROUP BY, который в SET делает requests = countMergeState(requests), но получается его уже нельзя делить на минуту, его надо делить на временной интервал, как это более правильно сделать? Есть идея завести отдельную колонку с дефолтным значением 60 и при set менять его на другие интервалы

Stepan
Хм, я наверно вообще не так задал вопрос... У меня...

ну у вас TTL ... GROUP BY ... SET count=avg(finalizeAggregation(count)) ? и не работает?

Stepan
Хм, я наверно вообще не так задал вопрос... У меня...

да, идея норм. но вам надо как то интервал посчитать тогда

Stepan
Хм, я наверно вообще не так задал вопрос... У меня...

Что если попробовать взять MIN и MAX времени в диапазоне и посчитать разницу — это и будет ваш временной диапазон, на который делить. Дальше получаете коэффициент от разницы минуты к вашей получившейся: (60 / ваша разница) * countMerge(requests) = сколько примерно в минуту?

Stepan- Автор вопроса
Slach [altinity]
ну у вас TTL ... GROUP BY ... SET count=avg(finali...

Conversion from Float64 to AggregateFunction(count, UInt64) is not supported: While processing _CAST(avg(finalizeAggregation(requests)), 'AggregateFunction(count, UInt64)').

Stepan- Автор вопроса
Slach [altinity]
да, идея норм. но вам надо как то интервал посчита...

в плане? я делаю получается в ttl GROUP BY set time = toStartOfHour(time) и для большего интервала toStartOfInterval(time, interval 6 hour)

Stepan- Автор вопроса
Rodion Baskakov
Что если попробовать взять MIN и MAX времени в диа...

немного не понял о каком диапазоне тут идет речь

Stepan
Conversion from Float64 to AggregateFunction(count...

так покажите полный CREATE TABLE на fiddle? откуда у вас requests взялся ? если вы собираетесь count усреднять?

Stepan
немного не понял о каком диапазоне тут идет речь

Насколько я понял, вы группируете записи по минуте, чтобы потом посчитать RPS в минуту. Так что и диапазон является минутой. Но если у вас нет данных за всю минуту, а есть только какая-то их часть внутри минуты, то описанным выше способом можно получить примерные данные внутри минуты используя лишь её часть. Возможно, я неверно понял вашу задачу

Stepan- Автор вопроса

https://xpaste.pro/p/J78L5MnZ

Stepan
https://xpaste.pro/p/J78L5MnZ

ну да, если добавить колонку, то потом ее можно использовать в SELECT и обновлять в GROUP BY ...

Stepan- Автор вопроса
Rodion Baskakov
Насколько я понял, вы группируете записи по минуте...

Спасибо, но мне немного другое нужно было)

Stepan- Автор вопроса
Slach [altinity]
ну да, если добавить колонку, то потом ее можно ис...

Была идея сделать как-то так https://xpaste.pro/p/tiGxOImh но нет, не дает :( в момент optimize final - Not found column 3600 in block. There are only columns: platform, requests, rollup_interval, event_time Пробовал делать умножение rollup_interval, но тоже не дает (ошибка такая же) Есть ли еще какие-то идеи решения? Может RPS как-то по другому хранить?

Stepan
Была идея сделать как-то так https://xpaste.pro/p/...

min(arrayMin([3600])) вот так попробуйте как workaround https://fiddle.clickhouse.com/907d58e4-2fa9-4795-9c74-e40dddafaa27

Slach [altinity]
min(arrayMin([3600])) вот так попробуйте как worka...

😐🖐🏻 min(arrayMin([3600])) вот так попробуйте как workaround https://fiddle.clickhouse.com/907d58e4-2fa9-4795-9c74-e40dddafaa27

Stepan- Автор вопроса
Slach [altinity]
min(arrayMin([3600])) вот так попробуйте как worka...

Not found column [3600] in block. :( видимо вообще самому значение там нельзя сетить, жуть выглядит так, что я как-то совсем не так как надо клик использую

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
Есть сайт. Там была древняя версия эво. Стоял плагин, который каждый коммент в Jot делал отдельной страницей. После обновления все слетело, теперь старница открывается отдельн...
Artem
1
Всем привет! Кто нибудь парсил в ручную JSON без библиотек и фреймворков? Есть может ссылки на оптимальный алгоритмы работы с текстом и примеры таких парсеров?
Lem
27
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
Добрый день. А shovel'ы можно как-то сконфигурировать в definitions.json? Пробовал что-то вроде: { "users": [ { "name": "agent", "password_hash": "RBCbTzQd...
Aleksey
1
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Карта сайта