Приведённые ниже функции предназначены для использования с агрегатными функциями timeSeries*(), такими как
timeSeriesInstantRateToGrid,
timeSeriesLastToGrid,
и другими.
seriesDecomposeSTL
Добавленный в: v24.1.0
Выполняет STL-декомпозицию временного ряда (Seasonal-Trend Decomposition Procedure Based on Loess) на сезонную, трендовую и остаточную компоненты.
Синтаксис
seriesDecomposeSTL(series, period)Аргументы
series— массив числовых значенийArray((U)Int8/16/32/64)илиArray(Float*)period— положительное целое числоUInt8/16/32/64
Возвращаемое значение
Возвращает массив из четырёх массивов, где первый содержит сезонные компоненты, второй — тренд, третий — остаточную компоненту, а четвёртый — базовую компоненту (сезонность + тренд). 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)Аргументы
series— Массив числовых значений.Array((U)Int8/16/32/64)илиArray(Float*)
Возвращаемое значение
Возвращает вещественное число, равное периоду ряда данных. 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— Целевая группа тегов.UInt64src_group— Исходная группа тегов.UInt64tag_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— Целевая группа тегов.UInt64src_group— Исходная группа тегов.UInt64tags_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)Аргументы
Возвращаемое значение
Возвращает значение указанного тега. 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— Начало временной сетки.DateTime64илиDateTimeилиUInt32end_timestamp— Конец временной сетки.DateTime64илиDateTimeилиUInt32step— Шаг временной сетки в секундахDecimal64илиDecimal32илиUInt32/64values— Массив значенийArray(Float*)илиArray(Nullable(Float*))
Возвращаемое значение
Возвращает значения из исходного массива вместе с временными метками на равномерной временной сетке, заданной 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— Группа тегов.UInt64dest_tag— Имя тега с объединённым значением, который будет добавлен вgroup.Stringseparator— Разделитель, вставляемый между объединяемыми значениями.Stringsrc_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)Аргументы
start_timestamp— Начало диапазона.DateTime64илиDateTimeилиUInt32end_timestamp— Конец диапазона.DateTime64илиDateTimeилиUInt32step— Шаг диапазона в секундахUInt32/64илиDecimal32/64
Возвращаемое значение
Возвращает диапазон временных меток. 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— Группа тегов.UInt64tags_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)Аргументы
Возвращаемое значение
Новая группа тегов без указанного тега. 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— Группа тегов.UInt64tags_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— Группа тегов.UInt64dest_tag— Имя тега назначения, в который записывается результирующая группа.Stringreplacement— Шаблон замены; может содержать1,2 или $name для ссылки на захватывающие группы в регулярном выражении 'regex'.Stringsrc_tag— Имя тега, значение которого используется для сопоставления с регулярным выражением 'regex'.Stringregex— Регулярное выражение.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 пропускаются.Anytags_array— Массив пар (tag_name, tag_value).Array(Tuple(String, String))илиNULLseparate_tag_name_i— Имя тега.StringилиFixedStringseparate_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, ...)Аргументы
tags_array— Массив пар (tag_name, tag_value).Array(Tuple(String, String))илиNULLtag_name_i— Имя тега.StringилиFixedStringtag_value_i— Значение тега.StringилиFixedStringилиNullable(String)
Возвращаемое значение
Возвращает группу тегов, связанную с указанными тегами. 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, ...)Аргументы
tags_array— Массив пар (tag_name, tag_value).Array(Tuple(String, String))илиMap(String, String)илиNULLtag_name_i— Имя тега.StringилиFixedStringtag_value_i— Значение тега.StringилиFixedStringилиNullable(String)
Возвращаемое значение
Возвращает карту, сопоставляющую имена тегов с их значениями, отсортированную по именам тегов и не содержащую повторяющихся имён или пустых значений тегов.
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()UInt8group— Группа тегов.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)