以下函数设计用于与 timeSeries*() aggregate functions 一起使用,例如
timeSeriesInstantRateToGrid、
timeSeriesLastToGrid
等。
seriesDecomposeSTL
引入版本:v24.1.0
使用 STL (基于 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
使用 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*
返回值
返回一个与输入数组长度相同的数组,其中每个值表示 series 中对应元素的异常可能性评分。非零评分表示该元素可能存在异常。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*)
返回值
返回一个实数值,表示时间序列数据的周期。当数据点少于 4 个时,返回 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 中的标签,以及从 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 中删除。
该函数模拟了 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。
如果值的数量与时间戳的数量不一致,该函数会抛出异常。
[x1, x2, x3, ...] 中的 NULL 值会被跳过,但当前时间戳仍会继续递增。
例如,对于 [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
Introduced in:v26.1.0
从标签组中移除指定标签。 如果该组中不存在该标签,则原样返回该组。 另请参见函数 timeSeriesRemoveTags()、 timeSeriesRemoveAllTagsExcept()。
Syntax
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
Introduced in: v26.1.0
从标签组中移除指定标签。 如果指定的某些标签不在标签组中,函数会将其忽略。 另请参见函数 timeSeriesRemoveTag()、 timeSeriesRemoveAllTagsExcept()。
Syntax
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
Introduced in: v26.1.0
将正则表达式 regex 与标签 src_tag 的值进行匹配。
如果匹配成功,返回组中标签 dest_tag 的值将为 replacement 的展开结果,
同时保留输入中的原始标签。
此函数模拟了 prometheus 函数
label_replace() 的逻辑。
Syntax
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— 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
Introduced in: 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。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) 对组成的数组与单独指定的 tag_name/tag_value 参数合并为一个映射。
结果会按 tag_name 排序,并移除重复的 tag_name 以及值为空的标签。
语法
timeSeriesTagsToMap(tags_array, tag_name_1, tag_value_1, tag_name_2, tag_value_2, ...)参数
tags_array— 由 (tag_name、tag_value) 对组成的 Array。Array(Tuple(String, String))或Map(String, String)或NULLtag_name_i— tag_name。String或FixedStringtag_value_i— tag_value。String或FixedString或Nullable(String)
返回值
返回一个按 tag_name 排序的 tag_name 到 tag_value 的映射,不包含重复的 tag_name 或空标签值。
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,如果其为 true,则抛出异常,并显示以下消息:
Multiple series have the same tags <tags>, duplicate series in the same result set are not allowed。
如果 condition 为 false,则函数返回 0。
此函数与 throwIf() 类似,
但使用了不同的错误代码,且错误消息的格式也不同。
语法
timeSeriesThrowDuplicateSeriesIf(condition, group)参数
返回值
返回 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)