在 InfluxDB 2.0 中,可以使用 aggregateWindow()
函数来对数据进行聚合操作。该函数的作用是将一个时间范围内的数据点聚合成一个单独的数据点,从而减少查询结果集的大小并提高查询性能。
aggregateWindow()
函数需要指定两个参数:时间窗口大小和聚合操作类型。例如,以下 Flux 查询使用 aggregateWindow()
函数对名为 “temperature” 的测量项中某个标签为 “location=room-1” 的所有记录进行每5分钟平均值聚合:
from influxdb_client import InfluxDBClient, Query
client = InfluxDBClient(url="http://localhost:8086", token="my-token")
query = Query('from(bucket:"my-bucket") \
|> range(start: -1d) \
|> filter(fn: (r) => r._measurement == "temperature" and r.location == "room-1") \
|> aggregateWindow(every: 5m, fn: mean)')
result = client.query_api().query(query=query, org="my-org")
print(result)
上述代码中,我们首先使用 range()
函数指定要查询的时间范围(这里是过去一天),然后使用 filter()
函数筛选出符合条件的数据点。接着调用 aggregateWindow()
函数对这些数据点进行每5分钟平均值聚合,并返回结果。
需要注意的是,aggregateWindow()
函数只能应用于已经被分组(grouped)的数据流中。如果查询中没有使用 group()
函数,aggregateWindow()
函数会自动将所有数据点合并为一个组,并对整个时间范围进行聚合。因此,在使用 aggregateWindow()
函数时,需要注意确保已经正确设置了分组条件。