Javascript XDB 2.0:分组期间和汇总期间
我有一个InfluxDB(版本2),其中每秒都会将一个条目写入我的bucket,还有一个Javascript XDB 2.0:分组期间和汇总期间,javascript,node.js,influxdb-2,Javascript,Node.js,Influxdb 2,我有一个InfluxDB(版本2),其中每秒都会将一个条目写入我的bucket,还有一个标识符(源的uuid)和一个边值(一些特定于域的度量值,从1到6)。与第二个日志的长列表不同: 2020-05-18T15:57:18 side=1 2020-05-18T15:57:19 side=1 2020-05-18T15:57:20 side=3 2020-05-18T15:57:21 side=3 2020-05-18T15:57:22 side=3 2020-05-18T15:57:23 sid
标识符(源的uuid)和一个边值(一些特定于域的度量值,从1到6)。与第二个日志的长列表不同:
2020-05-18T15:57:18 side=1
2020-05-18T15:57:19 side=1
2020-05-18T15:57:20 side=3
2020-05-18T15:57:21 side=3
2020-05-18T15:57:22 side=3
2020-05-18T15:57:23 side=2
2020-05-18T15:57:24 side=2
我想压缩这些条目,以便计算持续时间,即side=x
保持为真的时间:
from 2020-05-18T15:57:18 to 2020-05-18T15:57:19 side=1 duration=2s
from 2020-05-18T15:57:20 to 2020-05-18T15:57:22 side=3 duration=3s
from 2020-05-18T15:57:23 to 2020-05-18T15:57:24 side=2 duration=2s
我还通过从/到范围限制时间段。这是我当前的查询:
from(bucket: "mybucket")
|>range(start:2020-01-01T00:00:00.000Z, stop:2020-12-31T00:00:00.000Z
|>filter(fn:(r) => r.identifier == "3c583530-0152-4ed1-b15f-5bb0747e771e")
我的方法是读取原始数据,然后对其进行迭代,检测侧面的变化(比如current.side!=last.side
),然后将其作为新条目报告到我的日志中。当然,这种方法效率很低(JavaScript):
有没有一种方法可以使用XDB查询语言对数据进行分组和汇总
const data = fetchFromInfluxDB(from, to):
const terminator = { 'time': new Date(), 'identifier': '', 'side': -1 };
data.push(terminator); // make sure last item is also reported
const logbook = new Array();
let lastSide = -1;
let from = undefined;
for (let e of data) {
if (e.side != lastSide) {
if (from != undefined) {
let to = e.time;
let diff = Math.floor((new Date(to) - new Date(from)) / 1000);
if (diff > 0) {
logbook.push({'from': from, 'to': to, 'side': lastSide, 'seconds': diff});
}
}
lastSide = e.side;
from = e.time;
}
}