InfluxDB - 使用 Flux 按系列数限制查询结果
Posted
技术标签:
【中文标题】InfluxDB - 使用 Flux 按系列数限制查询结果【英文标题】:InfluxDB - limit query result by number of series using Flux 【发布时间】:2021-06-26 11:26:03 【问题描述】:我正在尝试使用 Flux 查询我的 InfluxDB (1.8) 并仅检索 100 个系列,起初我认为“限制”功能会做到这一点,但是,我发现它只限制了每个表中的记录数(series) 这可能导致 max(100) * N(series)。 然后我尝试了一种解决方法:
from(bucket: "bucket")
|> range(start:1970-01-01T00:00:00Z)
|> filter(fn: (r) => (r["_measurement"] == "measurement" ))
|> group()
|> limit(n:100)
|> group(columns:["column1","column2"])
这样做,我可以将所有结果分组到一个表中并限制结果,但是,它甚至不接近我需要的结果。 我只检索了 100 分,并且也失去了按列重新组合的能力。 我知道使用 InfluxQL 的“SLIMIT”功能是可以做到的。
关于如何使用通量查询语言实现这一目标有什么想法吗? 谢谢!
【问题讨论】:
【参考方案1】:我遇到了一些问题,确实在网上没有找到解决方案。
现在经过一些测试,我发现了一个可能会有所帮助的 hacky 解决方案。正如我从 influxdb 中了解到的那样,一个表中不能有多个标签值……左右。因此,在分组后,您有许多表,其中包含一些甚至只有一个值。
所以,我所做的就是在不丢失标签的情况下摆脱标签 - 这似乎有点 hacky:将标签移动到 _field,放下它并完成。
这里是一个例子:
from(bucket: "current")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "jobs")
|> filter(fn: (r) => r["_field"] == "DurationSum")
|> group (columns: ["jobName"]) // all durations - each jobname has its table
|> last() // each table has only the last value
|> drop (columns: ["_start", "_stop", "_time"])
|> map(fn: (r) => ( r with _field: r.jobName )) // hack: transfer the tag-name
|> drop (columns: ["jobName"]) // Now there is only ONE table
|> sort (desc: true)
|> limit (n: 10)
【讨论】:
以上是关于InfluxDB - 使用 Flux 按系列数限制查询结果的主要内容,如果未能解决你的问题,请参考以下文章
InfluxDB 2.1.1 安装使用flux查询数据可视化
InfluxDB 2.1.1 安装使用flux查询数据可视化
针对prometheus监控系统的influxdb数据库内存优化 #yyds干货盘点#