Influxdb 2.0 Flux - 如何返回 0 而不是 null

问题描述 投票:0回答:2

我想计算大于特定值的值的数量。 数据:

from(bucket: "bucket name")
    |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
    |> filter(fn: (r) => r._value > 35)
    |> count()

如果处理数据范围内没有大于指定值的值,则流入什么都不返回(无数据)。

influxdb influxdb-2 flux-influxdb
2个回答
3
投票

用小技巧解决... 而不是

filter()
count()
- 需要使用
map()
sum()

from(bucket: "bucket name")
     |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
     |> map(fn: (r) => ({ r with _value: if r._value 35 then 1 else 0 }))
     |> sum()


0
投票

失败:InfluxDB2 null 为零(float())

浮点值出现问题,

虚拟实例未在(缺失的)时间范围内运行

显示为不断消耗 CPU ...

Influxdb 连接没有 0 的系列,这里是缺少时间帧的 cpu 图

  • fill()
    仅适用于整数,
  • 不存在的数据点不能按值捕获(...)
  • aggregateWindow()
    终于有帮助了

解决方案:InfluxDB2 null as zero (float())

from(bucket: "sys")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r._measurement == "docker_cpu_percent" )
//  |> window(every: 5m, period: 5m, createEmpty: true)
  |> aggregateWindow(every: 5m, fn: mean, createEmpty: true)
  |> map(fn: (r) => ({
      r with
      _value: if exists r._value then float(v: r._value) * 1.0  else 0.0
    })
  )

资源

你可以参考

© www.soinside.com 2019 - 2024. All rights reserved.