Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

timeSeriesResampleToGridWithStaleness

timeSeriesResampleToGridWithStaleness

Добавленный в: v25.6.0

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

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

Если несколько образцов имеют одинаковую временную метку, используется только один из них: образец с наибольшим значением. Значение NaN уступает любому другому значению, поэтому значение NaN используется, только если все образцы с этой временной меткой имеют значение NaN.

Синтаксис

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

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

Параметры

  • start_timestamp — Задаёт начало сетки. При аргументе временной метки типа DateTime64 также может быть дробным числом или строкой, содержащей число либо текстовое представление даты и времени. UInt32 или DateTime или DateTime64 или Float* или Decimal* или String
  • end_timestamp — Задаёт конец сетки. При аргументе временной метки типа DateTime64 также может быть дробным числом или строкой, содержащей число либо текстовое представление даты и времени. UInt32 или DateTime или DateTime64 или Float* или Decimal* или String
  • grid_step — Задаёт шаг сетки в секундах. При аргументе временной метки типа DateTime64 также может быть дробным числом или строкой, содержащей число либо продолжительность, например '15s' или '1m'. UInt32 или Float* или Decimal* или String
  • staleness_window — Задаёт максимально допустимую устарелость последнего образца в секундах. При аргументе временной метки типа DateTime64 также может быть дробным числом или строкой, содержащей число либо продолжительность, например '15s' или '1m'. UInt32 или Float* или Decimal* или String

Аргументы

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

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

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

Примеры

Базовое использование с отдельными парами «временная метка — значение»

SET allow_experimental_time_series_aggregate_functions = 1;
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]                                                                            │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────┘

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

SET allow_experimental_time_series_aggregate_functions = 1;
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]                                                                              │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Navigation