如何在InfluxDB Flux中按proc字段子串/正则表达式分组
解决方案
要实现按proc字段的前缀(如CPU-010)分组,核心是先提取前缀生成新字段,再基于新字段分组。以下是修正后的Flux查询:
import "regexp" from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "Processors" and r.proc =~ /CPU-\d+\..*/) // 提取proc字段中.之前的前缀,生成新字段proc_group |> map(fn: (r) => ({ r with proc_group: regexp.extractString(r: r.proc, regex: /(CPU-\d+)\..*/) }) ) // 按新生成的proc_group分组 |> group(columns: ["proc_group"]) |> aggregateWindow(every: v.windowPeriod, fn: mean)
关键说明:
- 正则提取:使用
regexp.extractString函数,通过正则/(CPU-\d+)\..*/捕获CPU-后接数字、直到.之前的部分,生成proc_group字段。 - 过滤修正:原过滤正则
/(CPU-[09].*)[.].*/中的[09]仅匹配0或9,改为\d+匹配任意长度数字,确保覆盖CPU-010、CPU-110等所有格式。 - 分组逻辑:替换原
group(columns: ["proc"])为group(columns: ["proc_group"]),实现按前缀分组聚合。
验证逻辑
针对你提供的CSV数据示例,CPU-010.CORE010-00会被提取为CPU-010,所有同前缀的记录会被归为同一组,最终聚合结果即为各CPU前缀的平均使用率。
内容的提问来源于stack exchange,提问作者greg
相关产品推荐
相关产品推荐

