首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算平均运行时间

计算平均运行时间
EN

Stack Overflow用户
提问于 2022-06-24 14:22:08
回答 2查看 117关注 0票数 1

我想计算我的事件的平均持续时间。事件开始和结束后,它在线路协议语法中向我的线路协议语法发送一个请求。

代码语言:javascript
复制
mes1 id=1,event="start" 1655885442
mes1 id=1,event="end" 1655885519
mes1 id=2,event="start" 1655885643
mes1 id=2,event="end" 1655885914
mes1 id=3,event="start" 1655886288
mes1 id=3,event="end" 1655886372
mes1 id=4,event="start" 1655889323
mes1 id=4,event="end" 1655889490

我可以这样查询结果:

代码语言:javascript
复制
from(bucket: "buck1") 
  |> range(start: -1w)
  |> filter(fn: (r) => r["_measurement"] == "mes1")
  |> filter(fn: (r) => r["_field"] == "event")
  |> elapsed()

结果:

正如您所看到的,我还得到了之间的持续时间----这些事件,而不仅仅是事件本身。

因此,当我添加mean()函数时,我得到了所有经过的秒的平均值:

代码语言:javascript
复制
from(bucket: "buck1") 
  |> range(start: -1w)
  |> filter(fn: (r) => r["_measurement"] == "mes1")
  |> filter(fn: (r) => r["_field"] == "event")
  |> elapsed()
  |> mean(column: "elapsed")

结果:

我如何才能得到事件的平均值,而不是它们之间的时间?

这些活动的持续时间如下:

  • 77秒
  • 271秒
  • 84秒
  • 167秒

因此,预期的结果是599/4 = 149.75秒

更新:

代码语言:javascript
复制
from(bucket: "buck1") 
  |> range(start: -1w)
  |> filter(fn: (r) => r["_measurement"] == "mes1")
  |> filter(fn: (r) => r["_field"] == "event"  or r["_field"] == "id")
  |> group(columns: ["id"])
  |> elapsed()
  |> group(columns: ["_measurement"])
  |> mean(column: "elapsed")

结果:

代码语言:javascript
复制
runtime error @6:8-6:17: elapsed: schema collision: cannot group string and float types together
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-24 15:23:58

您需要按id进行分组,然后通过_measurement取消分组。

代码语言:javascript
复制
|> group(columns: ["id"])
|> elapsed()
|> group(columns: ["_measurement"])
|> mean(column: "elapsed")

更新我找到了另一个解决方案。需要使用difference而不是elapsed

代码语言:javascript
复制
|> filter(fn: (r) => r._field == "id")
|> group(columns: ["_value"])
|> difference(columns: ["_time"])
|> group()
|> mean(column: "_time")
票数 2
EN

Stack Overflow用户

发布于 2022-06-28 10:27:01

在计算出经过的时间后,您是否尝试过过滤?

代码语言:javascript
复制
from(bucket: "buck1") 
  |> range(start: -1w)
  |> filter(fn: (r) => r["_measurement"] == "mes1")
  |> filter(fn: (r) => r["_field"] == "event")
  |> elapsed()
  |> filter(fn: (r) => r["_value"] == "end")
  |> mean(column: "elapsed")

这似乎是获得结果的最简单的方法。当然,这假设你总是有一系列的开始,结束,开始,.一旦不能保证这一点,使用id似乎是更稳定的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72745478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档