Я оцениваю VictoriaMetrics для приложения IoT, в котором иногда возникают пробелы в серии из-за проблем с оборудованием или связью. В некоторых ситуациях отчетности временных рядов нам полезно интерполировать значения для пропущенных временных интервалов. Я вижу, что MetricsQL (который расширяет PromQL) имеет функцию keep_last_value()
, которая заполняет пробелы удерживание последнего наблюдаемого значения до появления нового (что будет полезно для нас), но в некоторых ситуациях линейная интерполяция между значениями до и после разрыва является более реалистичной оценкой недостающей части. Есть ли в PromQL или MetricsQL функция, которая будет выполнять линейную интерполяцию отсутствующих данных в серии, или можно создать более сложный запрос, который этого добьется?
Уточнение желаемой интерполяции
Я бы хотел простой интерполяции между точками непосредственно перед и после разрыва; я считаю, что это то, что делает функция TimescaleDB interpolate (). Другими словами, если мой временной ряд:
(1:00, 2)
(2:00, 4)
(3:00, NaN)
(4:00, 5)
(5:00, 1)
Я хочу, чтобы интерполированное значение 3:00 было 4,5, на полпути между точками непосредственно перед и после. Я не хочу, чтобы оно было 6 (это то, что я бы получил, экстраполируя из точек перед отсутствующим, игнорируя точки после), и мне не нужно какое-либо значение, которое я получил бы, если бы сделал линейную регрессию в целом серии и интерполированы в 3 часа (предположительно 3 или что-то близкое к этому).
Конечно, это простая иллюстрация, и также возможно, что разрыв может длиться более одного временного шага. Но в этом случае я бы все равно хотел, чтобы интерполяция основывалась исключительно на точках непосредственно до и сразу после разрыва, игнорируя остальную часть ряда.