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

posted @ 2023-03-22 21:12  大墨垂杨  阅读(546)  评论(0编辑  收藏  举报