如何基于列表迭代实现Flux Query数据过滤?
基于列表过滤Flux查询的实现方法
你的需求完全可行,但原查询的问题在于直接将表tophdd插值到正则表达式中,而tophdd是包含结构的表对象,并非可直接使用的字符串列表。以下是正确的实现方式:
方法1:使用contains()函数匹配列表(推荐)
先将tophdd表中的HDDID提取为字符串数组,再用contains()判断字段是否在数组内:
// 第一步:获取top2的HDDID并转为数组 tophdd = from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "HDDID") |> filter(fn: (r) => r.serial == "${Serial}") |> filter(fn: (r) => r._field == "HDDID_IOPS") |> highestMax(n:2, groupColumns: ["HDDID"]) |> keep(columns: ["HDDID"]) // 将表转换为HDDID字符串数组 |> map(fn: (r) => r.HDDID) |> reduce(fn: (accumulator, r) => accumulator + [r], init: []) // 第二步:基于数组过滤数据 from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "HDDID") |> filter(fn: (r) => r.serial == "${Serial}") |> filter(fn: (r) => r._field == "HDDID_IOPS") // 使用contains判断HDDID是否在目标列表中 |> filter(fn: (r) => contains(value: r.HDDID, set: tophdd)) |> aggregateWindow(column: "_value", every: v.windowPeriod, fn: mean)
方法2:构建正则表达式匹配
如果坚持使用正则,可以将数组拼接为正则匹配字符串:
// 第一步:获取top2的HDDID并转为正则字符串 tophdd = from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "HDDID") |> filter(fn: (r) => r.serial == "${Serial}") |> filter(fn: (r) => r._field == "HDDID_IOPS") |> highestMax(n:2, groupColumns: ["HDDID"]) |> keep(columns: ["HDDID"]) |> map(fn: (r) => r.HDDID) |> reduce(fn: (accumulator, r) => accumulator + [r], init: []) // 拼接为正则匹配的字符串(如HDD1|HDD2) |> join(separator: "|") // 转为Flux正则对象 |> (v) => regexp.compile(r: v) // 第二步:用正则过滤数据 from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "HDDID") |> filter(fn: (r) => r.serial == "${Serial}") |> filter(fn: (r) => r._field == "HDDID_IOPS") |> filter(fn: (r) => regexp.match(r: tophdd, v: r.HDDID)) |> aggregateWindow(column: "_value", every: v.windowPeriod, fn: mean)
原代码失败的核心原因是:${tophdd}会输出表的结构字符串,而非你期望的HDDID列表,导致正则表达式格式完全错误,无法匹配任何数据。
内容的提问来源于stack exchange,提问作者greg
相关产品推荐
相关产品推荐

