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

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

Ниже приведенные функции предназначены для использования с агрегатными функциями 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, то она возвращает массив из 1 элемента, содержащий эту временную метку: [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, то функция не скопирует такие нулевые значения в результирующий массив, но все равно увеличит текущую временную метку, то есть, например, для [value1, NULL, value2] функция вернет [(start_timestamp, value1), (start_timestamp + 2 * step, value2)].

Текущая временная метка увеличивается на шаг, пока она не станет больше 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))