счётчик , мне необходимо получать скорость его изменения за промежуток времени ( в идеале в значений в секунду). По сути нужен некий аналог оконных lag/lead функций ( ну или increase promql) Я нашел в документации, что есть оконные функции, но они вроде помечены экспериментальными.
Навскидку приходит простейшая конструкция типа group by по временным интервалам (например в две секунды) и вычисления разности между агрегатами max и min. Но возможно есть более правильный способ?
Если вы можете апгрейднутся до 21.3 и использовать оконки, то проще использовать оконки
Ещё раз пересмотрел доку. Там написано, что помимо этого lag все равно не поддерживается :(. Так что похоже оконки не вариант
там можно съэмулировать лаг через any, либо в 21.4 есть уже обычный лаг
Понятно. А если нет возможности перейти на последнюю. То как через group by сделать оптимально? Я так понимаю any берет первое попавшееся. И это не всегда детерминировано..
Ну тогда нужно думать, с какой точностью вам нужно отдавать результаты, сколько строк в одной секунде
А простой max - min насколько плох? Точность не сильно важна. Строк в секунде до десятка. Счётчик либо монотонно растет. Либо сбрасывается. В ноль и дальше опять растет
Если точность устраивает, то ок. Если строк на входе не очень много (до сотен тысяч) можно посмотреть на runningAccomulate
https://kb.altinity.com/altinity-kb-queries-and-syntax/cumulative-unique Тут не совсем оно, но почерпнуть что то можно Есть еще вариант с arrayJoin
Обсуждают сегодня