grafana - InfluxDB 查询如何过滤掉不存在行的数据

标签 grafana influxdb

我对 influx 和 influx 查询语言很陌生。 我正在尝试从 Grafana 查询数据。 在我的 InfluxDB 中,测量数据字段可以包含三个测量值。但是:并非每次进行测量时,都会测量所有三个可能的值,因此不会使用相同的时间戳进行存储。 现在我想过滤掉数据中仅存在所有三个值的行。 我不想将数据与特定范围内的时间戳结合起来,我特别只想要所有三个值都存在的数据。

我当前的查询如下所示:

from(bucket: "my_bucket")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "my_data")
  |> filter(fn: (r) => r["_field"] == "temp1"  or r["_field"] == "temp2" or r["_field"] == "temp3" )
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> yield()

作为输出,我得到所有存在 temp1、temp2 或 temp3 的行。但我只想要所有三个都存在的行。

我很确定我在这里缺少一些非常简单的解决方案,但无法在网上找到任何合适的解决方案。看起来这个函数 contains() 的功能与我的过滤器行基本相同。

最佳答案

您可以尝试使用 exists operator .

即:

from(bucket: "my_bucket")
     |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
     |> filter(fn: (r) => r["_measurement"] == "my_data")
     |> filter(fn: (r) => r["_field"] == "temp1"  or r["_field"] == "temp2" or r["_field"] == "temp3" )
     |> filter(fn: (r) => exists r._value)  // this line will filter out null values
     |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
     |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
     |> yield()

关于grafana - InfluxDB 查询如何过滤掉不存在行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74306798/

相关文章:

kubernetes - 我需要kubernertes-cadvisor来监视kubernetes吗

mysql - 如何使用 RDS mysql 实例的 IAM Auth 在 EC2 实例上设置 Grafana?

mysql - 使用 Prometheus + Grafana 监控 mysql 表增长

graphite - 如何在 Grafana/Graphite 中将两个系列列表相乘?

influxdb - 电报 : How collect Hexadecimal data and apply function before insert in influxdb?

elasticsearch - Grafana没有从本地Elastic Search加载数据

database - influxdb 数据/表可以下载为 csv 文件吗?

hbase - 访问速度极快的大数据

grafana - InfluxDB2/格拉法纳 : how can we filter a list of tag values with flux

influxdb - 如何选择特定月份的特定时段之间的数据?