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*илиStringend_timestamp— Задаёт конец сетки. При аргументе временной метки типаDateTime64также может быть дробным числом или строкой, содержащей число либо текстовое представление даты и времени.UInt32илиDateTimeилиDateTime64илиFloat*илиDecimal*илиStringgrid_step— Задаёт шаг сетки в секундах. При аргументе временной метки типаDateTime64также может быть дробным числом или строкой, содержащей число либо продолжительность, например '15s' или '1m'.UInt32илиFloat*илиDecimal*илиStringstaleness_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] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘