Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

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

seriesDecomposeSTL

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

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

Синтаксис

seriesDecomposeSTL(series, period)

Аргументы

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

Возвращает массив из четырёх массивов, где первый содержит сезонные компоненты, второй — тренд, третий — остаточную компоненту, а четвёртый — базовую компоненту (сезонность + тренд). 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.0

Обнаруживает выбросы во временном ряду с помощью границ Тьюки.

Синтаксис

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.0

Находит период заданного временного ряда с помощью 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 │
└─────────┘

timeSeriesCopyTag

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

Копирует указанный тег из одной группы тегов (src_group) в другую (dest_group). Функция заменяет все предыдущие значения скопированного тега в dest_group. Если скопированный тег отсутствует в src_group, функция также удаляет его из dest_group. Функция повторяет логику копирования модификаторов Prometheus group left/group right.

Синтаксис

timeSeriesCopyTag(dest_group, src_group, tag_to_copy)

Аргументы

  • dest_group — Целевая группа тегов. UInt64
  • src_group — Исходная группа тегов. UInt64
  • tag_to_copy — Имя тега, который нужно скопировать. String

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

Возвращает группу тегов, содержащую теги из dest_group, а также скопированные теги из src_group. UInt64

Примеры

Пример

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)
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)───────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('env','dev'),('region','eu')] │
└────────────┴───────────┴──────────────┴───────────────────────────────────────────────────────────┘

timeSeriesCopyTags

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

Копирует указанные теги из одной группы тегов (src_group) в другую (dest_group). Функция заменяет все предыдущие значения скопированных тегов в dest_group. Если какие-либо из копируемых тегов отсутствуют в src_group, функция также удалит их из dest_group. Функция повторяет логику копирования модификаторов group left/group right в Prometheus: group left/group right.

Синтаксис

timeSeriesCopyTags(dest_group, src_group, tags_to_copy)

Аргументы

  • dest_group — Целевая группа тегов. UInt64
  • src_group — Исходная группа тегов. UInt64
  • tags_to_copy — Имена тегов для копирования. Array(String)

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

Возвращает группу тегов, которая содержит теги из dest_group, а также скопированные теги из src_group. UInt64

Примеры

Пример

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)
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('code','404'),('region','eu')] │
└────────────┴───────────┴──────────────┴────────────────────────────────────────────────────────────┘

timeSeriesExtractTag

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

Извлекает значение указанного тега из группы. Если тег не найден, возвращает NULL. См. также функцию timeSeriesGroupToTags().

Синтаксис

timeSeriesExtractTag(group)

Аргументы

  • group — Группа тегов. UInt64
  • tag_to_extract — Имя тега, который нужно извлечь из группы. String

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

Возвращает значение указанного тега. Nullable(String)

Примеры

Пример

SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesExtractTag(group, '__name__'),
       timeSeriesExtractTag(group, 'env'),
       timeSeriesExtractTag(group, 'instance')
┌─group─┬─timeSeriesExtractTag(group, '__name__')─┬─timeSeriesExtractTag(group, 'env')─┬─timeSeriesExtractTag(group, 'instance')─┐
│     1 │ http_requests_count                     │ dev                                │ ᴺᵁᴸᴸ                                    │
└───────┴─────────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────────┘

timeSeriesFromGrid

Добавленный в: 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)].

Синтаксис

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

timeSeriesGroupToSamplingKey

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

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

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

Синтаксис

timeSeriesGroupToSamplingKey(group)

Аргументы

  • group — Группа тегов. UInt64

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

Стабильный хеш UInt64, полученный из тегов, связанных с группой. UInt64

Примеры

Пример

SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesGroupToSamplingKey(group) AS sampling_key
┌─group─┬─────────sampling_key─┐
│     1 │ 15511321834549144507 │
└───────┴──────────────────────┘

timeSeriesGroupToTags

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

Возвращает имена и значения тегов, связанных с указанной группой. См. также функцию timeSeriesTagsToGroup().

Синтаксис

timeSeriesGroupToTags(group)

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

Аргументы

  • group — группа тегов. UInt64

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

Возвращает массив пар (tag_name, tag_value). Возвращаемый массив всегда отсортирован по tag_name и не содержит повторяющихся значений tag_name. Array(Tuple(String, String))

Примеры

Пример

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)
┌─group─┬─sorted_tags────────────────────────────────────────────────────────┬─same_group─┬─throwIf(notEquals(same_group, group))─┐
│     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │          1 │                                     0 │
└───────┴────────────────────────────────────────────────────────────────────┴────────────┴───────────────────────────────────────┘

timeSeriesIdToGroup

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

Возвращает имена и значения тегов, связанных с указанным идентификатором временного ряда. См. также функцию timeSeriesStoreTags().

Синтаксис

timeSeriesIdToGroup(id)

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

Аргументы

  • id — Идентификатор временного ряда. Должен иметь тот же тип, который использовался при вызове timeSeriesStoreTags(). Any

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

Возвращает группу тегов, связанную с идентификатором id временного ряда. UInt64

Примеры

Пример

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)
┌────────────id─┬───────same_id─┬─throwIf(notEquals(same_id, id))─┬─group─┬─timeSeriesGroupToTags(group)───────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                               0 │     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴─────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────┘

timeSeriesIdToTags

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

Возвращает теги, связанные с указанным идентификатором временного ряда. См. также функцию timeSeriesStoreTags().

Синтаксис

timeSeriesIdToTags(id)

Аргументы

  • id — идентификатор временного ряда. Должен иметь тот же тип, который использовался при вызове timeSeriesStoreTags(). Any

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

Возвращает массив пар (tag_name, tag_value). Возвращаемый массив всегда отсортирован по tag_name и не содержит повторяющихся значений tag_name. Array(Tuple(String, String))

Примеры

Пример

SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToTags(same_id)
┌────────────id─┬───────same_id─┬─throwIf(notEquals(same_id, id))─┬─timeSeriesIdToTags(same_id)────────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                               0 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴─────────────────────────────────┴────────────────────────────────────────────────────────────────────┘

timeSeriesJoinTags

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

Объединяет значения указанных тегов, извлечённых из группы тегов. Функция вставляет разделитель между объединяемыми значениями и возвращает новую группу тегов, в которой тегу dest_tag присваивается объединённое значение. Эта функция повторяет логику функции Prometheus label_join().

Синтаксис

timeSeriesJoinTags(group, dest_tag, separator, src_tags)

Аргументы

  • group — Группа тегов. UInt64
  • dest_tag — Имя тега с объединённым значением, который будет добавлен в group. String
  • separator — Разделитель, вставляемый между объединяемыми значениями. String
  • src_tags — Имена исходных тегов, значения которых будут объединены. Array(String)

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

Возвращает новую группу тегов, в которой тег dest_tag содержит объединённый результат. UInt64

Примеры

Пример

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)
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─────────────────────────────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a,b,c'),('job','api-server'),('src1','a'),('src2','b'),('src3','c')] │
└───────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┘

timeSeriesMetricTypeToSuffixes

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

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

Синтаксис

timeSeriesMetricTypeToSuffixes(type)

Аргументы

  • type — тип метрики Prometheus (counter, gauge, histogram, summary, …). String

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

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

Примеры

Пример

SELECT timeSeriesMetricTypeToSuffixes('histogram') AS suffixes;
┌─suffixes────────────────────┐
│ ['_bucket','_count','_sum'] │
└─────────────────────────────┘

timeSeriesRange

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

Генерирует диапазон временных меток [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)
┌─timeSeriesRange(CAST('2025-06-01 00:00:00', 'DateTime64(3)'), CAST('2025-06-01 00:01:00', 'DateTime64(3)'), 30)─┐
│ ['2025-06-01 00:00:00.000','2025-06-01 00:00:30.000','2025-06-01 00:01:00.000']                                 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

timeSeriesRemoveAllTagsExcept

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

Удаляет из группы тегов все теги, кроме указанных. См. также функцию timeSeriesRemoveTag(), timeSeriesRemoveTags().

Синтаксис

timeSeriesRemoveAllTagsExcept(group, tags_to_keep)

Аргументы

  • group — Группа тегов. UInt64
  • tags_to_keep — Имена тегов, которые нужно сохранить в группе. Array(String)

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

Новая группа тегов, в которой сохранены только указанные теги. UInt64

Примеры

Пример

SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesRemoveAllTagsExcept(group, ['env']) AS result_group,
       timeSeriesGroupToTags(result_group)
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─┐
│     1 │            2 │ [('env','dev')]                     │
└───────┴──────────────┴─────────────────────────────────────┘

timeSeriesRemoveTag

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

Удаляет указанный тег из группы тегов. Если такого тега в группе нет, группа возвращается без изменений. См. также функцию timeSeriesRemoveTags(), timeSeriesRemoveAllTagsExcept().

Синтаксис

timeSeriesRemoveTag(group, tag_to_remove)

Аргументы

  • group — Группа тегов. UInt64
  • tag_to_remove — Имя тега, который нужно удалить из группы. String

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

Новая группа тегов без указанного тега. UInt64

Примеры

Пример

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

timeSeriesRemoveTags

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

Удаляет указанные теги из группы тегов. Если некоторые из указанных тегов отсутствуют в группе тегов, функция игнорирует их. См. также функцию timeSeriesRemoveTag(), timeSeriesRemoveAllTagsExcept().

Синтаксис

timeSeriesRemoveTags(group, tags_to_remove)

Аргументы

  • group — Группа тегов. UInt64
  • tags_to_remove — Имена тегов, которые нужно удалить из группы. Array(String)

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

Новая группа тегов, из которой удалены указанные теги. UInt64

Примеры

Пример

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)
┌─group_of_3─┬─group_of_1─┬─timeSeriesGroupToTags(group_of_1)────┬─empty_group─┬─timeSeriesGroupToTags(empty_group)─┐
│          1 │          2 │ [('__name__','http_requests_count')] │           0 │ []                                 │
└────────────┴────────────┴──────────────────────────────────────┴─────────────┴────────────────────────────────────┘

timeSeriesReplaceTag

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

Сопоставляет регулярное выражение regex со значением тега src_tag. Если совпадение найдено, значением тега dest_tag в возвращаемой группе будет результат раскрытия replacement вместе с исходными тегами во входных данных. Эта функция повторяет логику функции Prometheus label_replace().

Синтаксис

timeSeriesReplaceTag(group, dest_tag, replacement, src_tag, regex)

Аргументы

  • group — Группа тегов. UInt64
  • dest_tag — Имя тега назначения, в который записывается результирующая группа. String
  • replacement — Шаблон замены; может содержать 1, 2 или $name для ссылки на захватывающие группы в регулярном выражении 'regex'. String
  • src_tag — Имя тега, значение которого используется для сопоставления с регулярным выражением 'regex'. String
  • regex — Регулярное выражение. String

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

Новая группа тегов, в которую может быть добавлен dest_tag. UInt64

Примеры

Пример

SELECT timeSeriesTagsToGroup([('__name__', 'up'), ('job', 'api-server'), ('service', 'a:c')]) AS group,
       timeSeriesReplaceTag(group, 'foo', '$1', 'service', '(.*):.*') AS result_group,
       timeSeriesGroupToTags(result_group)
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a'),('job','api-server'),('service','a:c')] │
└───────┴──────────────┴────────────────────────────────────────────────────────────────────────┘

timeSeriesStoreTags

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

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

Синтаксис

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

Аргументы

  • id — Идентификатор временного ряда. Может быть любого сопоставимого типа. Строки с идентификаторами NULL пропускаются. Any
  • tags_array — Массив пар (tag_name, tag_value). Array(Tuple(String, String)) или NULL
  • separate_tag_name_i — Имя тега. String или FixedString
  • separate_tag_value_i — Значение тега. String или FixedString или Nullable(String)

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

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

Примеры

Пример

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

timeSeriesTagsToGroup

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

Возвращает группу тегов, связанную с указанными тегами. Если одна и та же группа тегов встречается несколько раз в ходе выполнения запроса, функция возвращает одну и ту же группу. Для пустого множества тегов функция всегда возвращает 0. См. также функцию timeSeriesGroupToTags().

Синтаксис

timeSeriesTagsToGroup(tags_array, tag_name_1, tag_value_1, tag_name2, tag_value2, ...)

Аргументы

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

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

Примеры

Пример

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)
┌─group1─┬─group2─┬─empty_group─┬─same_group2─┬─throwIf(notEquals(same_group2, group2))─┬─timeSeriesGroupToTags(group2)──┐
│      1 │      2 │           0 │           2 │                                       0 │ [('__name__','http_failures')] │
└────────┴────────┴─────────────┴─────────────┴─────────────────────────────────────────┴────────────────────────────────┘

timeSeriesTagsToMap

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

Объединяет массив пар (tag_name, tag_value) и отдельные аргументы имени и значения тега в одну карту. Результат сортируется по имени тега; повторяющиеся имена тегов и теги с пустыми значениями удаляются.

Синтаксис

timeSeriesTagsToMap(tags_array, tag_name_1, tag_value_1, tag_name_2, tag_value_2, ...)

Аргументы

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

Возвращает карту, сопоставляющую имена тегов с их значениями, отсортированную по именам тегов и не содержащую повторяющихся имён или пустых значений тегов. Map(String, String)

Примеры

Пример

SELECT timeSeriesTagsToMap([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS tags
┌─tags─────────────────────────────────────────────────────────┐
│ {'__name__':'http_requests_count','env':'dev','region':'eu'} │
└──────────────────────────────────────────────────────────────┘

timeSeriesThrowDuplicateSeriesIf

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

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

Синтаксис

timeSeriesThrowDuplicateSeriesIf(condition, group)

Аргументы

  • condition — Условие, которое нужно проверить; обычно содержит функцию count() UInt8
  • group — Группа тегов. UInt64

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

Возвращает 0. UInt8

Примеры

Одна серия на группу

CREATE TABLE test(tags Array(Tuple(String, String))) engine=Memory;

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

SELECT timeSeriesThrowDuplicateSeriesIf(count() > 1, timeSeriesTagsToGroup(tags))
FROM test
GROUP BY timeSeriesTagsToGroup(tags);
0

Две серии с одинаковыми тегами

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

SELECT timeSeriesThrowDuplicateSeriesIf(count() > 1, timeSeriesTagsToGroup(tags))
FROM test
GROUP BY timeSeriesTagsToGroup(tags);
Received exception:
Code: 768. DB::Exception: Multiple series have the same tags {'__name__': 'up'}, duplicate series in the same result set are not allowed. (DUPLICATE_TIME_SERIES)
Navigation