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



我对流入和流入查询语言很陌生。我正试图从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运算符。

即:

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()

相关内容

  • 没有找到相关文章

最新更新