> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по функциям для работы с временными рядами

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

Приведённые ниже функции предназначены для использования с агрегатными функциями `timeSeries*()`, такими как
[`timeSeriesInstantRateToGrid`](/ru/reference/functions/aggregate-functions/timeSeriesInstantRateToGrid),
[`timeSeriesLastToGrid`](/ru/reference/functions/aggregate-functions/timeSeriesResampleToGridWithStaleness),
и другими.

{/*AUTOGENERATED_START*/}

<div id="seriesDecomposeSTL">
  ## seriesDecomposeSTL
</div>

Добавленный в: v24.1.0

Выполняет STL-декомпозицию временного ряда [(Seasonal-Trend Decomposition Procedure Based on Loess)](https://www.wessa.net/download/stl.pdf) на сезонную, трендовую и остаточную компоненты.

**Синтаксис**

```sql theme={null}
seriesDecomposeSTL(series, period)
```

**Аргументы**

* `series` — массив числовых значений [`Array((U)Int8/16/32/64)`](/ru/reference/data-types/array) или [`Array(Float*)`](/ru/reference/data-types/array)
* `period` — положительное целое число [`UInt8/16/32/64`](/ru/reference/data-types/int-uint)

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

Возвращает массив из четырёх массивов, где первый содержит сезонные компоненты, второй — тренд, третий — остаточную компоненту, а четвёртый — базовую компоненту (сезонность + тренд). [`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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
```

```response title=Response theme={null}
┌───────────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
    ]]                                                                                                                   │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="seriesOutliersDetectTukey">
  ## seriesOutliersDetectTukey
</div>

Добавленный в: v24.2.0

Обнаруживает выбросы во временном ряду с помощью [границ Тьюки](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences).

**Синтаксис**

```sql theme={null}
seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K])
```

**Аргументы**

* `series` — Массив числовых значений. [`Array((UInt8/16/32/64))`](/ru/reference/data-types/array) или [`Array(Float*)`](/ru/reference/data-types/array)
* `min_percentile` — Необязательно. Минимальный процентиль, используемый для вычисления межквартильного размаха [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range). Значение должно находиться в диапазоне \[0.02,0.98]. Значение по умолчанию — 0.25. [`Float*`](/ru/reference/data-types/float)
* `max_percentile` — Необязательно. Максимальный процентиль, используемый для вычисления межквартильного размаха (IQR). Значение должно находиться в диапазоне \[0.02,0.98]. Значение по умолчанию — 0.75. [`Float*`](/ru/reference/data-types/float)
* `K` — Необязательно. Неотрицательная константа для обнаружения умеренных и более сильных выбросов. Значение по умолчанию — 1.5. [`Float*`](/ru/reference/data-types/float)

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

Возвращает массив той же длины, что и входной, где каждое значение представляет собой оценку возможной аномалии соответствующего элемента ряда. Ненулевая оценка указывает на возможную аномалию. [`Array(Float32)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0
```

```response title=Response theme={null}
┌───────────print_0─────────────────┐
│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │
└───────────────────────────────────┘
```

**Настраиваемые параметры обнаружения выбросов**

```sql title=Query theme={null}
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
```

```response title=Response theme={null}
┌─print_0──────────────────────────────┐
│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │
└──────────────────────────────────────┘
```

<div id="seriesPeriodDetectFFT">
  ## seriesPeriodDetectFFT
</div>

Добавленный в: v23.12.0

Находит период заданного временного ряда с помощью FFT — [быстрого преобразования Фурье](https://en.wikipedia.org/wiki/Fast_Fourier_transform)

**Синтаксис**

```sql theme={null}
seriesPeriodDetectFFT(series)
```

**Аргументы**

* `series` — Массив числовых значений. [`Array((U)Int8/16/32/64)`](/ru/reference/data-types/array) или [`Array(Float*)`](/ru/reference/data-types/array)

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

Возвращает вещественное число, равное периоду ряда данных. NaN, если количество точек данных меньше четырёх. [`Float64`](/ru/reference/data-types/float)

**Примеры**

**Определение периода по простому шаблону**

```sql title=Query theme={null}
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
```

```response title=Response theme={null}
┌───────────print_0──────┐
│                      3 │
└────────────────────────┘
```

**Определение периода в сложном паттерне**

```sql title=Query theme={null}
SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0
```

```response title=Response theme={null}
┌─print_0─┐
│       6 │
└─────────┘
```

<div id="timeSeriesCopyTag">
  ## timeSeriesCopyTag
</div>

Добавленный в: v26.1.0

Копирует указанный тег из одной группы тегов (`src_group`) в другую (`dest_group`).
Функция заменяет все предыдущие значения скопированного тега в `dest_group`.
Если скопированный тег отсутствует в `src_group`, функция также удаляет его из `dest_group`.
Функция повторяет логику копирования модификаторов Prometheus
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Синтаксис**

```sql theme={null}
timeSeriesCopyTag(dest_group, src_group, tag_to_copy)
```

**Аргументы**

* `dest_group` — Группа тегов назначения. [`UInt64`](/ru/reference/data-types/int-uint)
* `src_group` — Исходная группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tag_to_copy` — Имя тега, который нужно скопировать. [`String`](/ru/reference/data-types/string)

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

Возвращает группу тегов, содержащую теги из `dest_group`, а также скопированные теги из `src_group`. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS dest_group,
       timeSeriesTagsToGroup([('code', '404'), ('message', 'Page not found')], '__name__', 'http_codes') AS src_group,
       timeSeriesCopyTag(dest_group, src_group, '__name__') AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('code','404'),('region','eu')] │
└────────────┴───────────┴──────────────┴────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesCopyTags">
  ## timeSeriesCopyTags
</div>

Добавленный в: v26.1.0

Копирует указанные теги из одной группы тегов (`src_group`) в другую (`dest_group`).
Функция заменяет все предыдущие значения скопированных тегов в `dest_group`.
Если какие-либо из копируемых тегов отсутствуют в `src_group`, функция также удалит их из `dest_group`.
Функция повторяет логику копирования модификаторов group left/group right в Prometheus:
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Синтаксис**

```sql theme={null}
timeSeriesCopyTags(dest_group, src_group, tags_to_copy)
```

**Аргументы**

* `dest_group` — Целевая группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `src_group` — Исходная группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tags_to_copy` — Имена тегов для копирования. [`Array(String)`](/ru/reference/data-types/array)

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

Возвращает группу тегов, которая содержит теги из `dest_group`, а также скопированные теги из `src_group`. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS dest_group,
       timeSeriesTagsToGroup([('code', '404'), ('message', 'Page not found')], '__name__', 'http_codes') AS src_group,
       timeSeriesCopyTags(dest_group, src_group, ['__name__', 'code', 'env']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('code','404'),('region','eu')] │
└────────────┴───────────┴──────────────┴────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesExtractTag">
  ## timeSeriesExtractTag
</div>

Добавленный в: v26.1.0

Извлекает значение указанного тега из группы. Если тег не найден, возвращает NULL.
См. также функцию [timeSeriesGroupToTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Синтаксис**

```sql theme={null}
timeSeriesExtractTag(group)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tag_to_extract` — Имя тега, который нужно извлечь из группы. [`String`](/ru/reference/data-types/string)

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

Возвращает значение указанного тега. [`Nullable(String)`](/ru/reference/data-types/nullable)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesExtractTag(group, '__name__'),
       timeSeriesExtractTag(group, 'env'),
       timeSeriesExtractTag(group, 'instance')
```

```response title=Response theme={null}
┌─group─┬─timeSeriesExtractTag(group, '__name__')─┬─timeSeriesExtractTag(group, 'env')─┬─timeSeriesExtractTag(group, 'instance')─┐
│     1 │ http_requests_count                     │ dev                                │ ᴺᵁᴸᴸ                                    │
└───────┴─────────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────────┘
```

<div id="timeSeriesFromGrid">
  ## timeSeriesFromGrid
</div>

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

Преобразует массив значений `[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)]`.

**Синтаксис**

```sql theme={null}
timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)
```

**Аргументы**

* `start_timestamp` — Начало временной сетки. [`DateTime64`](/ru/reference/data-types/datetime64) или [`DateTime`](/ru/reference/data-types/datetime) или [`UInt32`](/ru/reference/data-types/int-uint)
* `end_timestamp` — Конец временной сетки. [`DateTime64`](/ru/reference/data-types/datetime64) или [`DateTime`](/ru/reference/data-types/datetime) или [`UInt32`](/ru/reference/data-types/int-uint)
* `step` — Шаг временной сетки в секундах [`Decimal64`](/ru/reference/data-types/decimal) или [`Decimal32`](/ru/reference/data-types/decimal) или [`UInt32/64`](/ru/reference/data-types/int-uint)
* `values` — Массив значений [`Array(Float*)`](/ru/reference/data-types/array) или [`Array(Nullable(Float*))`](/ru/reference/data-types/array)

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

Возвращает значения из исходного массива вместе с временными метками на равномерной временной сетке, заданной `start_timestamp` и `step`. [`Array(Tuple(DateTime64, Float64))`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─────────────────────────────────────────────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)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesGroupToSamplingKey">
  ## timeSeriesGroupToSamplingKey
</div>

Добавленный в: v26.4.0

Возвращает стабильный ключ выборки `UInt64`, вычисляемый на основе тегов указанной группы.

Значение детерминировано: одинаковые входные теги всегда дают один и тот же ключ.
Предназначен для использования в качестве ключа сортировки для операторов сэмплирования, таких как `limitk` и `limit_ratio`.

**Синтаксис**

```sql theme={null}
timeSeriesGroupToSamplingKey(group)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)

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

Стабильный хеш `UInt64`, полученный из тегов, связанных с группой. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesGroupToSamplingKey(group) AS sampling_key
```

```response title=Response theme={null}
┌─group─┬─────────sampling_key─┐
│     1 │ 12876543210987654321 │
└───────┴──────────────────────┘
```

<div id="timeSeriesGroupToTags">
  ## timeSeriesGroupToTags
</div>

Добавленный в: v26.1.0

Возвращает имена и значения тегов, связанных с указанной группой.
См. также функцию [timeSeriesTagsToGroup()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesTagsToGroup).

**Синтаксис**

```sql theme={null}
timeSeriesGroupToTags(group)
```

**Псевдонимы**: `timeSeriesTagsGroupToTags`

**Аргументы**

* `group` — группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)

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

Возвращает массив пар `(tag_name, tag_value)`.
Возвращаемый массив всегда отсортирован по `tag_name` и не содержит повторяющихся значений `tag_name`.
[`Array(Tuple(String, String))`](/ru/reference/data-types/array)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesGroupToTags(group) AS sorted_tags,
       timeSeriesTagsToGroup(sorted_tags) AS same_group,
       throwIf(same_group != group)
```

```response title=Response theme={null}
┌─group─┬─sorted_tags────────────────────────────────────────────────────────┬─same_group─┬─throwIf(notE⋯up, group))─┐
│     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │          1 │                        0 │
└───────┴────────────────────────────────────────────────────────────────────┴────────────┴──────────────────────────┘
```

<div id="timeSeriesIdToGroup">
  ## timeSeriesIdToGroup
</div>

Добавленный в: v26.1.0

Возвращает имена и значения тегов, связанных с указанным идентификатором временного ряда.
См. также функцию [timeSeriesStoreTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Синтаксис**

```sql theme={null}
timeSeriesIdToGroup(id)
```

**Псевдонимы**: `timeSeriesIdToTagsGroup`

**Аргументы**

* `id` — Идентификатор временного ряда. [`UInt64`](/ru/reference/data-types/int-uint) или [`UInt128`](/ru/reference/data-types/int-uint) или [`UUID`](/ru/reference/data-types/uuid) или [`FixedString(16)`](/ru/reference/data-types/fixedstring)

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

Возвращает группу тегов, связанную с идентификатором `id` временного ряда. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToGroup(same_id) AS group,
       timeSeriesGroupToTags(group)
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notE⋯me_id, id))─┬─group─┬─timeSeriesGroupToTags(group)───────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                        0 │     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴──────────────────────────┴───────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesIdToTags">
  ## timeSeriesIdToTags
</div>

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

Возвращает теги, связанные с указанным идентификатором временного ряда.
См. также функцию [timeSeriesStoreTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Синтаксис**

```sql theme={null}
timeSeriesIdToTags(id)
```

**Аргументы**

* `id` — идентификатор временного ряда. [`UInt64`](/ru/reference/data-types/int-uint) или [`UInt128`](/ru/reference/data-types/int-uint) или [`UUID`](/ru/reference/data-types/uuid) или [`FixedString(16)`](/ru/reference/data-types/fixedstring)

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

Возвращает массив пар `(tag_name, tag_value)`.
Возвращаемый массив всегда отсортирован по `tag_name` и не содержит повторяющихся значений `tag_name`.
[`Array(Tuple(String, String))`](/ru/reference/data-types/array)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToTags(same_id)
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notE⋯me_id, id))─┬─timeSeriesIdToTags(same_id)────────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                        0 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴──────────────────────────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesJoinTags">
  ## timeSeriesJoinTags
</div>

Добавленный в: v26.1.0

Объединяет значения указанных тегов, извлечённых из группы тегов.
Функция вставляет разделитель между объединяемыми значениями и возвращает новую группу тегов,
в которой тегу `dest_tag` присваивается объединённое значение.
Эта функция повторяет логику функции Prometheus
[label\_join()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_join).

**Синтаксис**

```sql theme={null}
timeSeriesJoinTags(group, dest_tag, separator, src_tags)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `dest_tag` — Имя тега с объединённым значением, который будет добавлен в `group`. [`String`](/ru/reference/data-types/string)
* `separator` — Разделитель, вставляемый между объединяемыми значениями. [`String`](/ru/reference/data-types/string)
* `src_tags` — Имена исходных тегов, значения которых будут объединены. [`Array(String)`](/ru/reference/data-types/array)

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

Возвращает новую группу тегов, в которой тег `dest_tag` содержит объединённый результат. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('__name__', 'up'), ('job', 'api-server'), ('src1', 'a'), ('src2', 'b'), ('src3', 'c')]) AS group,
       timeSeriesJoinTags(group, 'foo', ',', ['src1', 'src2', 'src3']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─────────────────────────────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a,b,c'),('job','api-server'),('src1','a'),('src2','b'),('src3','c')] │
└───────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesRange">
  ## timeSeriesRange
</div>

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

Генерирует диапазон временных меток \[start\_timestamp, start\_timestamp + step, start\_timestamp + 2 \* step, ..., end\_timestamp].

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

Функция `timeSeriesRange()` похожа на функцию [range](/ru/reference/functions/regular-functions/array-functions#range).

**Синтаксис**

```sql theme={null}
timeSeriesRange(start_timestamp, end_timestamp, step)
```

**Аргументы**

* `start_timestamp` — Начало диапазона. [`DateTime64`](/ru/reference/data-types/datetime64) или [`DateTime`](/ru/reference/data-types/datetime) или [`UInt32`](/ru/reference/data-types/int-uint)
* `end_timestamp` — Конец диапазона. [`DateTime64`](/ru/reference/data-types/datetime64) или [`DateTime`](/ru/reference/data-types/datetime) или [`UInt32`](/ru/reference/data-types/int-uint)
* `step` — Шаг диапазона в секундах [`UInt32/64`](/ru/reference/data-types/int-uint) или [`Decimal32/64`](/ru/reference/data-types/decimal)

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

Возвращает диапазон временных меток. [`Array(DateTime64)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30)
```

```response title=Response theme={null}
┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesRemoveAllTagsExcept">
  ## timeSeriesRemoveAllTagsExcept
</div>

Добавленный в: v26.1.0

Удаляет из группы тегов все теги, кроме указанных.
См. также функцию [timeSeriesRemoveTag()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags).

**Синтаксис**

```sql theme={null}
timeSeriesRemoveAllTagsExcept(group, tags_to_keep)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tags_to_keep` — Имена тегов, которые нужно сохранить в группе. [`Array(String)`](/ru/reference/data-types/array)

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

Новая группа тегов, в которой сохранены только указанные теги. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesRemoveAllTagsExcept(group, ['env']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─┐
│     1 │            2 │ [('env','dev')]                     │
└───────┴──────────────┴─────────────────────────────────────┘
```

<div id="timeSeriesRemoveTag">
  ## timeSeriesRemoveTag
</div>

Добавленный в: v26.1.0

Удаляет указанный тег из группы тегов.
Если такого тега в группе нет, группа возвращается без изменений.
См. также функцию [timeSeriesRemoveTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags),
[timeSeriesRemoveAllTagsExcept()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Синтаксис**

```sql theme={null}
timeSeriesRemoveTag(group, tag_to_remove)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tag_to_remove` — Имя тега, который нужно удалить из группы. [`String`](/ru/reference/data-types/string)

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

Новая группа тегов без указанного тега. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group_of_3,
       timeSeriesRemoveTag(group_of_3, '__name__') AS group_of_2,
       timeSeriesGroupToTags(group_of_2),
       timeSeriesRemoveTag(group_of_2, 'env') AS group_of_1,
       timeSeriesGroupToTags(group_of_1),
       timeSeriesRemoveTag(group_of_1, 'region') AS empty_group,
       timeSeriesGroupToTags(empty_group)
```

```response title=Response theme={null}
┌─group_of_3─┬─group_of_2─┬─timeSeriesGroupToTags(group_of_2)─┬─group_of_1─┬─timeSeriesGroupToTags(group_of_1)─┬─empty_group─┬─timeSeriesGroupToTags(empty_group)─┐
│          1 │          2 │ [('env','dev'),('region','eu')]   │          3 │ [('region','eu')]                 │           0 │ []                                 │
└────────────┴────────────┴───────────────────────────────────┴────────────┴───────────────────────────────────┴─────────────┴────────────────────────────────────┘
```

<div id="timeSeriesRemoveTags">
  ## timeSeriesRemoveTags
</div>

Добавленный в: v26.1.0

Удаляет указанные теги из группы тегов.
Если некоторые из указанных тегов отсутствуют в группе тегов, функция игнорирует их.
См. также функцию [timeSeriesRemoveTag()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveAllTagsExcept()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Синтаксис**

```sql theme={null}
timeSeriesRemoveTags(group, tags_to_remove)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `tags_to_remove` — Имена тегов, которые нужно удалить из группы. [`Array(String)`](/ru/reference/data-types/array)

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

Новая группа тегов, из которой удалены указанные теги. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group_of_3,
       timeSeriesRemoveTags(group_of_3, ['env', 'region']) AS group_of_1,
       timeSeriesGroupToTags(group_of_1),
       timeSeriesRemoveTags(group_of_1, ['__name__', 'nonexistent']) AS empty_group,
       timeSeriesGroupToTags(empty_group)
```

```response title=Response theme={null}
┌─group_of_3─┬─group_of_1─┬─timeSeriesGroupToTags(group_of_1)────┬─empty_group─┬─timeSeriesGroupToTags(empty_group)─┐
│          1 │          2 │ [('__name__','http_requests_count')] │           0 │ []                                 │
└────────────┴────────────┴──────────────────────────────────────┴─────────────┴────────────────────────────────────┘
```

<div id="timeSeriesReplaceTag">
  ## timeSeriesReplaceTag
</div>

Добавленный в: v26.1.0

Сопоставляет регулярное выражение `regex` со значением тега `src_tag`.
Если совпадение найдено, значением тега `dest_tag` в возвращаемой группе будет результат раскрытия `replacement`
вместе с исходными тегами во входных данных.
Эта функция повторяет логику функции Prometheus
[label\_replace()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_replace).

**Синтаксис**

```sql theme={null}
timeSeriesReplaceTag(group, dest_tag, replacement, src_tag, regex)
```

**Аргументы**

* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)
* `dest_tag` — Имя тега назначения, в который записывается результирующая группа. [`String`](/ru/reference/data-types/string)
* `replacement` — Шаблон замены; может содержать $1, $2 или \$name для ссылки на захватывающие группы в регулярном выражении 'regex'. [`String`](/ru/reference/data-types/string)
* `src_tag` — Имя тега, значение которого используется для сопоставления с регулярным выражением 'regex'. [`String`](/ru/reference/data-types/string)
* `regex` — Регулярное выражение. [`String`](/ru/reference/data-types/string)

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

Новая группа тегов, в которую может быть добавлен `dest_tag`. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('__name__', 'up'), ('job', 'api-server'), ('service', 'a:c')]) AS group,
       timeSeriesReplaceTag(group, 'foo', '$1', 'service', '(.*):.*') AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a'),('job','api-server'),('service','a:c')] │
└───────┴──────────────┴────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesStoreTags">
  ## timeSeriesStoreTags
</div>

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

Сохраняет в контексте запроса соответствие между указанным идентификатором временного ряда и набором тегов.
Функции [timeSeriesIdToTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesIdToTags)
и [timeSeriesIdToGroup()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesIdToGroup)
можно использовать для доступа к этому соответствию позже, во время выполнения запроса.

**Синтаксис**

```sql theme={null}
timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...)
```

**Аргументы**

* `id` — Идентификатор временного ряда. [`UInt64`](/ru/reference/data-types/int-uint) или [`UInt128`](/ru/reference/data-types/int-uint) или [`UUID`](/ru/reference/data-types/uuid) или [`FixedString(16)`](/ru/reference/data-types/fixedstring)
* `tags_array` — Массив пар (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/ru/reference/data-types/array) или [`NULL`](/ru/reference/syntax#null)
* `separate_tag_name_i` — Имя тега. [`String`](/ru/reference/data-types/string) или [`FixedString`](/ru/reference/data-types/fixedstring)
* `separate_tag_value_i` — Значение тега. [`String`](/ru/reference/data-types/string) или [`FixedString`](/ru/reference/data-types/fixedstring) или [`Nullable(String)`](/ru/reference/data-types/nullable)

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

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

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToTags(same_id),
       timeSeriesGroupToTags(timeSeriesIdToGroup(same_id))
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notEquals(same_id, id))─┬─timeSeriesIdToTags(same_id)────────────────────────────────────────┬─timeSeriesGroupToTags(timeSeriesIdToGroup(same_id))────────────────┐
│ 8374283493092 │ 8374283493092 │                               0 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴─────────────────────────────────┴────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesTagsToGroup">
  ## timeSeriesTagsToGroup
</div>

Добавленный в: v26.1.0

Возвращает группу тегов, связанную с указанными тегами.
Если одна и та же группа тегов встречается несколько раз в ходе выполнения запроса, функция возвращает одну и ту же группу.
Для пустого множества тегов функция всегда возвращает 0.
См. также функцию [timeSeriesGroupToTags()](/ru/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Синтаксис**

```sql theme={null}
timeSeriesTagsToGroup(tags_array, tag_name_1, tag_value_1, tag_name2, tag_value2, ...)
```

**Аргументы**

* `tags_array` — Массив пар (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/ru/reference/data-types/array) или [`NULL`](/ru/reference/syntax#null)
* `tag_name_i` — Имя тега. [`String`](/ru/reference/data-types/string) или [`FixedString`](/ru/reference/data-types/fixedstring)
* `tag_value_i` — Значение тега. [`String`](/ru/reference/data-types/string) или [`FixedString`](/ru/reference/data-types/fixedstring) или [`Nullable(String)`](/ru/reference/data-types/nullable)

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

Возвращает группу тегов, связанную с указанными тегами. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group1,
       timeSeriesTagsToGroup([], '__name__', 'http_failures') AS group2,
       timeSeriesTagsToGroup([]) AS empty_group,
       timeSeriesTagsToGroup([], '__name__', 'http_failures') AS same_group2,
       throwIf(same_group2 != group2),
       timeSeriesGroupToTags(group2)
```

```response title=Response theme={null}
┌─group1─┬─group2─┬─empty_group─┬─same_group2─┬─throwIf(notEquals(same_group2, group2))─┬─timeSeriesGroupToTags(group2)──┐
│      1 │      2 │           0 │           2 │                                       0 │ [('__name__','http_failures')] │
└────────┴────────┴─────────────┴─────────────┴─────────────────────────────────────────┴────────────────────────────────┘
```

<div id="timeSeriesThrowDuplicateSeriesIf">
  ## timeSeriesThrowDuplicateSeriesIf
</div>

Добавленный в: v26.2.0

Проверяет `condition` и, если оно истинно, генерирует исключение со следующим сообщением:
`Multiple series have the same tags <tags>, duplicate series in the same result set are not allowed`.
Если `condition` ложно, функция возвращает `0`.
Эта функция похожа на [throwIf()](/ru/reference/functions/regular-functions/other-functions#throwIf),
но использует другой код ошибки и по-другому форматирует сообщение об ошибке.

**Синтаксис**

```sql theme={null}
timeSeriesThrowDuplicateSeriesIf(condition, group)
```

**Аргументы**

* `condition` — Условие, которое нужно проверить; обычно содержит функцию [count()](/ru/reference/functions/aggregate-functions/count#count) [`UInt8`](/ru/reference/data-types/int-uint)
* `group` — Группа тегов. [`UInt64`](/ru/reference/data-types/int-uint)

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

Возвращает `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример**

```sql title=Query theme={null}
CREATE TABLE test(tags Array(Tuple(String, String))) engine=Memory;

INSERT INTO test VALUES ([('__name__', 'up')]);

SELECT timeSeriesTagsToGroup(tags) AS group
FROM test
GROUP BY group
HAVING timeSeriesThrowDuplicateSeriesIf(count() > 1, group) = 0;  -- ОК

INSERT INTO test VALUES ([('__name__', 'up')]);

SELECT timeSeriesTagsToGroup(tags) AS group
FROM test
GROUP BY group
HAVING timeSeriesThrowDuplicateSeriesIf(count() > 1, group) = 0;  -- Генерирует исключение "Multiple series have the same tags {'__name__': 'up'}"
```

```response title=Response theme={null}
```
