1

我正在尝试使用 Flux 查询我的 InfluxDB(1.8)并仅检索 100 个系列,起初我认为“限制”功能会做到这一点,但是,我发现它只限制了每个表(系列)中的记录数这可能导致 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” 功能,它可以做到。

关于如何使用通量查询语言实现这一目标的任何想法?谢谢!

4

1 回答 1

0

我遇到了一些问题,确实在网上找不到解决方案。

现在经过一些测试,我发现了一个可能有帮助的 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)
于 2021-10-29T08:24:37.907 回答