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

Функции для временных рядов

Ниже приведённые функции предназначены для использования с агрегатными функциями timeSeries*(), такими как timeSeriesInstantRateToGrid, timeSeriesLastToGrid и другими.

timeSeriesRange

Создает диапазон временных меток.

Синтаксис

timeSeriesRange(start_timestamp, end_timestamp, step)

Аргументы

  • start_timestamp - начало диапазона.
  • end_timestamp - конец диапазона.
  • step - шаг диапазона в секундах.

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

  • Возвращает диапазон временных меток [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp].

Примеры

Запрос:

SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) AS rng;

Результат:

┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘

Примечания

  • Если функция timeSeriesRange() вызывается с start_timestamp, равным end_timestamp, то она возвращает массив из одного элемента, содержащий эту временную метку: [start_timestamp]
  • Функция timeSeriesRange() аналогична функции range. Например, если тип временных меток — DateTime64(3) и start_timestamp < end_timestamp, то timeSeriesRange(start_timestamp, end_timestamp, step) возвращает тот же результат, что и следующее выражение:
range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(DateTime64(3))

timeSeriesFromGrid

Преобразует массив значений [value1, value2, value3, ..., valueN] в массив кортежей [(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)].

Если некоторые из значений [value1, value2, value3, ...] равны NULL, функция не будет копировать такие значения NULL в результирующий массив, но при этом всё равно увеличит текущую метку времени. Например, для [value1, NULL, value2] функция вернёт [(start_timestamp, value1), (start_timestamp + 2 * step, value2)].

Текущая метка времени увеличивается на step до тех пор, пока не станет больше, чем end_timestamp, при этом каждой метке времени сопоставляется значение из заданного массива. Если количество значений не совпадает с количеством меток времени, функция выбросит исключение.

Синтаксис

timeSeriesFromGrid(start_timestamp, end_timestamp, step, values);

Аргументы

  • start_timestamp — начало временной сетки.
  • end_timestamp — конец временной сетки.
  • step — шаг временной сетки в секундах.
  • values — массив значений [value1, value2, ..., valueN].

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

  • Возвращает значения из исходного массива, совмещённые с метками времени в соответствии с регулярной временной сеткой, задаваемой start_timestamp и step.

Примеры

Запрос:

SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result;

Результат:

┌─────────────────────────────────────────────result─────────────────────────────────────────────┐
│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘

Примечание Функция timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) возвращает тот же результат, что и следующее выражение:

arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_timestamp, step), values))