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

Функции для работы с временными рядами

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

seriesDecomposeSTL

Добавлена в: v24.1

Разлагает данные временного ряда с помощью STL (Seasonal-Trend Decomposition Procedure Based on Loess) на сезонную, трендовую и остаточную составляющие.

Синтаксис

seriesDecomposeSTL(series, period)

Аргументы

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

Возвращает массив из четырёх массивов, где первый массив содержит сезонные компоненты, второй массив — тренд, третий массив — остаток, а четвёртый массив — базовую линию (seasonal + trend). Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))

Примеры

Декомпозиция данных временного ряда с использованием STL

SELECT seriesDecomposeSTL([10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34], 3) AS print_0
┌───────────print_0──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [[
        -13.529999, -3.1799996, 16.71,      -13.53,     -3.1799996, 16.71,      -13.53,     -3.1799996,
        16.71,      -13.530001, -3.18,      16.710001,  -13.530001, -3.1800003, 16.710001,  -13.530001,
        -3.1800003, 16.710001,  -13.530001, -3.1799994, 16.71,      -13.529999, -3.1799994, 16.709997
    ],
    [
        23.63,     23.63,     23.630003, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001,
        23.630001, 23.630001, 23.630001, 23.63,     23.630001, 23.630001, 23.63,     23.630001,
        23.630001, 23.63,     23.630001, 23.630001, 23.630001, 23.630001, 23.630001, 23.630003
    ],
    [
        0, 0.0000019073486, -0.0000019073486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0000019073486, 0,
        0
    ],
    [
        10.1, 20.449999, 40.340004, 10.100001, 20.45, 40.34, 10.100001, 20.45, 40.34, 10.1, 20.45, 40.34,
        10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.100002, 20.45, 40.34
    ]]                                                                                                                   │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

seriesOutliersDetectTukey

Добавлена в версии: v24.2

Обнаруживает выбросы в данных временных рядов с использованием оград Тьюки (Tukey fences).

Синтаксис

seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K])

Аргументы

  • series — Массив числовых значений. Array((UInt8/16/32/64)) или Array(Float*)
  • min_percentile — Необязательный параметр. Минимальный перцентиль, используемый для вычисления межквартильного размаха (IQR). Значение должно быть в диапазоне [0.02,0.98]. Значение по умолчанию — 0.25. Float*
  • max_percentile — Необязательный параметр. Максимальный перцентиль, используемый для вычисления межквартильного размаха (IQR). Значение должно быть в диапазоне [0.02,0.98]. Значение по умолчанию — 0.75. Float*
  • K — Необязательный параметр. Неотрицательная константа для обнаружения умеренных или более сильных выбросов. Значение по умолчанию — 1.5. Float*

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

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

Примеры

Базовое обнаружение выбросов

SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0
┌───────────print_0─────────────────┐
│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │
└───────────────────────────────────┘

Обнаружение выбросов с настраиваемыми параметрами

SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4.50, 5, 12, 45, 12, 3.40, 3, 4, 5, 6], 0.2, 0.8, 1.5) AS print_0
┌─print_0──────────────────────────────┐
│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │
└──────────────────────────────────────┘

seriesPeriodDetectFFT

Добавлена в: v23.12

Определяет период заданного ряда данных с использованием FFT — быстрого преобразования Фурье

Синтаксис

seriesPeriodDetectFFT(series)

Аргументы

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

Возвращает значение с плавающей запятой, равное периоду данных временного ряда. NaN, если количество точек данных меньше четырёх. Float64

Примеры

Определение периода для простого паттерна

SELECT seriesPeriodDetectFFT([1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6]) AS print_0
┌───────────print_0──────┐
│                      3 │
└────────────────────────┘

Выделение периодов по сложному шаблону

SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0
┌─print_0─┐
│       6 │
└─────────┘

timeSeriesFromGrid

Введена в версии: v25.8

Преобразует массив значений [x1, x2, x3, ...] в массив кортежей [(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...].

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

Значения NULL в [x1, x2, x3, ...] пропускаются, но текущая метка времени всё равно увеличивается. Например, для [value1, NULL, x2] функция возвращает [(start_timestamp, x1), (start_timestamp + 2 * step, x2)].

Синтаксис

timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)

Аргументы

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

Возвращает значения из исходного массива, объединённые с метками времени на равномерной временной сетке, задаваемой start_timestamp и step. Array(Tuple(DateTime64, Float64))

Примеры

Пример использования

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)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘

timeSeriesIdToTags

Добавлено в: v25.8

Функция находит теги, связанные с указанным идентификатором временного ряда.

Синтаксис

timeSeriesIdToTags(id)

Аргументы

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

Возвращает массив пар вида (tag_name, tag_value). Array(Tuple(String, String))

Примеры

Пример

SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTags(id)
8374283493092    [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')]

timeSeriesIdToTagsGroup

Добавлено в версии: v25.8

Преобразует указанный идентификатор временного ряда в индекс его группы. Индексы групп — это числа 0, 1, 2, 3, сопоставленные каждому уникальному набору тегов в контексте выполняемого запроса.

Синтаксис

timeSeriesIdToTagsGroup(id)

Аргументы

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

Возвращает индекс группы, связанный с этим набором тегов. UInt64

Примеры

Пример

SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id)
8374283493092    0

timeSeriesRange

Введена в версии: v25.8

Генерирует диапазон меток времени вида [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp].

Если start_timestamp равен end_timestamp, функция возвращает массив из одного элемента, содержащий [start_timestamp].

Функция timeSeriesRange() аналогична функции range.

Синтаксис

timeSeriesRange(start_timestamp, end_timestamp, step)

Аргументы

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

Возвращает диапазон временных меток в виде Array(DateTime64).

Примеры

Пример использования

SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30)
┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘

timeSeriesStoreTags

Добавлена в: v25.8

Сохраняет соответствие между идентификатором временного ряда и его тегами в контексте запроса, чтобы функция timeSeriesIdToTags() могла позже извлечь эти теги.

Синтаксис

timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...)

Аргументы

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

Возвращает первый аргумент, то есть идентификатор временного ряда.

Примеры

Пример

SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count')
8374283493092

timeSeriesTagsGroupToTags

Добавлено в версии: v25.8

Находит теги, связанные с групповым индексом. Групповые индексы — это числа 0, 1, 2, 3, соответствующие каждому уникальному набору тегов в контексте выполняемого в данный момент запроса.

Синтаксис

timeSeriesTagsGroupToTags(group)

Аргументы

  • group — групповой индекс, связанный с временным рядом. UInt64

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

Массив пар (tag_name, tag_value). Array(Tuple(String, String))

Примеры

Пример

SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) AS group, timeSeriesTagsGroupToTags(group)
8374283493092    0    [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')]