influxdb2与influxdb1、tdengine在聚合上的一个小小差异
==问题背景==
发现influxdb2的时间切片聚合结果与其他版本的时序数据有差异。
对比了influxdb1.7版本,tdengine2.6.0.12版本。
这个差异对我们目前双引擎的架构方式带来了一个巨大的挑战,算是一个坑。
具体差异如下:
首先看tdengine(2.6.0.12):每个切片的时间为当前切片的开始时间
其次看influxdb1(1.7):每个切片的时间为当前切片的开始时间
最后看influxdb2(2.0):每个切片的时间为当前切片的结束时间。(WTF?)
==解决办法==
花了3个小时翻influxdb2的官网文档,并进行各种惨绝人寰的尝试之后,终于找到解决办法:即在aggregateWindow()中增加timeSrc: "_start"参数。
修改之后的flux查询语句如下:
from(bucket: "db_rexel_20221229131302") |> range(start: 2023-03-20T00:00:00Z, stop: 2023-03-21T00:00:00Z) |> filter(fn: (r) => r["_measurement"] == "d_20230308110326356_10780_8a4953") |> filter(fn: (r) => r["_field"] == "point000005") |> aggregateWindow(timeSrc: "_start", every: 1h, fn: last) |> sort(columns: ["_time"]) |> yield(name: "last")
==相关文档==
参考文档:https://docs.influxdata.com/flux/v0.x/stdlib/universe/aggregatewindow/#function-type-signature