【问题标题】:Can I calculate a moving sum on a field in InfluxDB?我可以计算 InfluxDB 中某个字段的移动总和吗?
【发布时间】:2019-11-12 04:32:08
【问题描述】:

我试图了解是否可以在我的一项测量中计算出 1 个月的总收入数据。对于每一天,我想要前 30 天的总和。

这可以在 InfluxDB 中还是通过 Grafana 的查询界面实现?

【问题讨论】:

  • 你需要试试 Flux。 InfluxQL 不支持移动总和(仅移动平均)。
  • @JanGaraj 谢谢,我不知道 Flux。我做了一些谷歌搜索,但似乎到处都是。有什么地方我可以阅读 Flux,它与 Influxdb 的关系,以及 Grafana 等是否支持它?
  • Flux 还没有普遍可用,它只是技术预览。已经有 Grafana Flux 插件(测试版)。它由 InfluxDB 团队开发,是一种查询数据的新概念。它可以成为您的解决方案,因为它比 InfluxQL 更强大。 Github 可以作为一个很好的起点 - github.com/influxdata/flux
  • 仅供参考,这是PromQL - sum_over_time(metric[30d]) 中的微不足道的任务。我希望 InfluxDB 能尽快获得 PromQL 支持...

标签: grafana influxdb


【解决方案1】:

移动平均移动总和,除以样本数。因此,如果您想要过去 30 个值的移动总和:

select 30*moving_average(field_name, 30) from measurement

编辑添加:

正如 Peter Halicky 在 cmets 中指出的那样,这不是过去的 30 天。这是过去 30 个数据点。

如果您每天都有数据,那不是问题。

如果您缺少一天的数据,您仍然会得到 30 个样本的平均值,但它会延长 31 天而不是 30 天。

如果您实际上并不关心日历,但想知道过去 30 天的活动,这不是问题。

如果这是一个问题,有一些解决方法。一个可能比听起来更棘手的问题:确保每天都有一个条目。

更可靠的方法是让报告应用分两步执行此操作。像这样的东西(还没有弄清楚所有的细节,但你明白了):

  1. 使用select count(field_name) from measurement where time > now() - 30d 之类的查询查找过去 30 天的数据点数。
  2. 使用此号码(称为n)构成查询:select n*moving_average(field_name, n) from measurement where time > now - 30d

【讨论】:

  • 谢谢,事后看来这很明显!这是正确的答案
  • 嗯,这是过去 30 个样本的移动总和,而不是特定时间间隔内的移动总和。如果您每天有一个样本(这可能是 OP 的情况),则此方法有效,但如果您在一段时间内有〜不可预测的样本数量,它将无法按预期工作。
  • @PeterHalicky,真的。编辑修复。谢谢!
  • 那么这将是两个查询;可能在grafana中禁止使用...? (如果 InfluxDB 也有一个 Moving_sum 函数会容易得多)
  • 他们在 Flux 中有移动总和,但是 a) Flux 目前还处于测试阶段 - 事情肯定会改变,b) 上次我检查时(大约 6 个月前)Flux 非常消耗 CPU。
【解决方案2】:

是的,绝对有可能。 只需像这样设置查询的这一部分:

SELECT sum("value") FROM "YOUR_TAG_NAME"
WHERE $timeFilter GROUP BY time(30d) fill(null)

只需确保您的仪表板时间包括Last 30 days(至少)。

【讨论】:

  • 这与我尝试过的类似,但这不是将 30 天的块分组吗?我想要的是 - sum(11/12/2019 to 11/12/2019-30d), sum(11/11/2019 to 11/11/2019-30d) 等
  • 这就是说,我希望图表中的每个条都是当天和之前 30 天的总和(移动/窗口总和)
  • 现在我明白了,你想显示每个月一个参数的总和。尝试制作时间组(每 1 个月)并在每个查询中将其替换为时间组。
  • 我不太擅长 InfluxDB 查询,能否请您提供或指出一个示例来说明您的意思?
  • group by time(30d) 表示每30天计算一次总和。因此计算将在第 30、60、90 天等发生。OP 希望每天计算前 30 天。即第 30 天是第 1 天到第 30 天的总和,第 31 天是第 2 天到第 31 天的总和,等等。
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2016-04-12
  • 1970-01-01
相关资源
最近更新 更多