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

timeSeriesPredictLinearToGrid

timeSeriesPredictLinearToGrid

Введена в версии: v25.6

Агрегатная функция, которая принимает данные временных рядов в виде пар меток времени и значений и рассчитывает линейный прогноз в стиле PromQL с указанным смещением времени прогноза на регулярной временной сетке, задаваемой начальной меткой времени, конечной меткой времени и шагом. Для каждой точки на сетке выборки для вычисления predict_linear рассматриваются в пределах заданного временного окна.

Примечание

Эта функция является экспериментальной. Чтобы её включить, задайте allow_experimental_ts_to_grid_aggregate_function=true.

Синтаксис

timeSeriesPredictLinearToGrid(start_timestamp, end_timestamp, grid_step, staleness, predict_offset)(timestamp, value)

Параметры

  • start_timestamp — задаёт начало сетки. - end_timestamp — задаёт конец сетки. - grid_step — задаёт шаг сетки в секундах. - staleness — задаёт максимальную «устарелость» рассматриваемых выборок в секундах. Окно устарелости представляет собой полуинтервал, открытый слева и закрытый справа. - predict_offset — задаёт количество секунд смещения, добавляемого к времени прогноза.

Аргументы

  • timestamp — метка времени выборки. Может быть как отдельными значениями, так и массивами. - value — значение временного ряда, соответствующее метке времени. Может быть как отдельными значениями, так и массивами.

Возвращаемое значение

Значения predict_linear на указанной сетке в виде Array(Nullable(Float64)). Возвращаемый массив содержит одно значение для каждой точки временной сетки. Значение равно NULL, если внутри окна недостаточно выборок для вычисления значения скорости изменения для конкретной точки сетки.

Примеры

Вычисление значений predict_linear на сетке [90, 105, 120, 135, 150, 165, 180, 195, 210] с 60‑секундным смещением

WITH
    -- NOTE: the gap between 140 and 190 is to show how values are filled for ts = 150, 165, 180 according to window parameter
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values, -- array of values corresponding to timestamps above
    90 AS start_ts,       -- start of timestamp grid
    90 + 120 AS end_ts,   -- end of timestamp grid
    15 AS step_seconds,   -- step of timestamp grid
    45 AS window_seconds, -- "staleness" window
    60 AS predict_offset  -- prediction time offset
SELECT timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamp, value)
FROM
(
    -- This subquery converts arrays of timestamps and values into rows of `timestamp`, `value`
    SELECT
        arrayJoin(arrayZip(timestamps, values)) AS ts_and_val,
        ts_and_val.1 AS timestamp,
        ts_and_val.2 AS value
);
┌─timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamp, value)─┐
│ [NULL,NULL,1,9.166667,11.6,16.916666,NULL,NULL,16.5]                                                            │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Тот же запрос с аргументами-массивами

WITH
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 120 AS end_ts,
    15 AS step_seconds,
    45 AS window_seconds,
    60 AS predict_offset
SELECT timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamps, values);
┌─timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamp, value)─┐
│ [NULL,NULL,1,9.166667,11.6,16.916666,NULL,NULL,16.5]                                                            │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘