首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InfluxDB 2.0流量-如何处理零除法

InfluxDB 2.0流量-如何处理零除法
EN

Stack Overflow用户
提问于 2020-11-12 16:11:13
回答 1查看 799关注 0票数 0

嗨,我试着做一个简单的成功率计算之间的度量。通过将成功请求的数量除以尝试的次数。问题是,在两个度量都为0的情况下,某些间隔是空的。当我编写查询时,我会得到以下“不能除以零”的运行时错误。在SQL中有一个NULLIF函数来避免这种情况。是否有类似的变化,还是有一种替代的方法来避免除以零?

错误:runtime error @7:6-7:90: map: failed to evaluate map function: cannot divide by zero

我的示例查询:

代码语言:javascript
复制
from(bucket: "my_db")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "HTTPRequests")
  |> filter(fn: (r) => r["_field"] == "RequestAttempt" or r["_field"] == "RequestSuccess_E")
  |> filter(fn: (r) => r["host"] == "host-a")
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> map(fn: (r) => ({ r with Request_SR: r.RequestSuccess_E/r.RequestAttempt }))

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 19:25:37

内流小组回答了我的问题,这对我的案子有效。

您可以使用一些简单的条件逻辑来检查ReqeustSuccess和RequestAttempt的值。您可以检查它们是null还是0。您确实需要为操作数或null或零提供默认值,因为您不能映射空值。

代码语言:javascript
复制
from(bucket: "my_db")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "HTTPRequests")
  |> filter(fn: (r) => r["_field"] == "RequestAttempt" or r["_field"] == "RequestSuccess_E")
  |> filter(fn: (r) => r["host"] == "host-a")
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> map(fn: (r) => ({ r with
      Request_SR:
        if not exists r.RequestSuccess_E or r.RequestSuccess_E == 0.0 then 0.0
        else if not exists r.RequestAttempt or r.RequestAttempt == 0.0 then 0.0
        else r.RequestSuccess_E / r.RequestAttempt 
  }))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64807532

复制
相关文章

相似问题

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