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

timeSeriesResampleToGridWithStaleness

timeSeriesResampleToGridWithStaleness

Впервые представлена в версии v25.6

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

Псевдоним: timeSeriesLastToGrid.

Примечание

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

Синтаксис

timeSeriesResampleToGridWithStaleness(start_timestamp, end_timestamp, grid_step, staleness_window)(timestamp, value)

Псевдонимы: timeSeriesLastToGrid

Параметры

  • start_timestamp — Определяет начало сетки. UInt32 или DateTime
  • end_timestamp — Определяет конец сетки. UInt32 или DateTime
  • grid_step — Определяет шаг сетки в секундах. UInt32
  • staleness_window — Определяет максимальную «устарелость» самого свежего отсчёта в секундах. UInt32

Аргументы

  • timestamp — Метка времени отсчёта. Может задаваться отдельными значениями или массивами. UInt32 или DateTime или Array(UInt32) или Array(DateTime)
  • value — Значение временного ряда, соответствующее метке времени. Может задаваться отдельными значениями или массивами. Float* или Array(Float*)

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

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

Примеры

Базовое использование с отдельными парами (метка времени, значение)

WITH
    -- NOTE: the gap between 140 and 190 is to show how values are filled for ts = 150, 165, 180 according to staleness 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
    30 AS window_seconds  -- "staleness" window
SELECT timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(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
);
┌─timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)─┐
│ [NULL,NULL,1,3,4,4,NULL,5,8]                                                                           │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘

Использование массивов в качестве аргументов

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,
    30 AS window_seconds
SELECT timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
┌─timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values)─┐
│ [NULL,NULL,1,3,4,4,NULL,5,8]                                                                             │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘