首页 > 解决方案 > InfluxDB 2.0 - 如何使用 Flux 将 2 个单独的存储桶流合并和求和

问题描述

语境

我在一个带有 influxDB 的应用程序中工作,我面临一个我不知道如何解决的用例。
我正在使用 influxDB 2 和 Flux 进行查询。

用例

为了简化我的用例,我将以蜜蜂为例。

我想测量蜜蜂种群随时间的演变。
我在 2 个单独的桶中测量了 2 个蜜蜂种群(蜜蜂 A 的桶 A 和蜜蜂 B 的桶 B)。
所以我想找到一个合并这两个桶的查询,以便随时获取当前的蜜蜂种群。
在我的用例中,必须使用 2 个存储桶。我想要的只是一种在查询时“组合”结果的方法。

结果应根据时间戳进行排序

例子

Bee A对存储桶和存储桶的查询Bee B返回前 2 行中的值。目标是创建Total线。

示例 1:
如果测量值始终为 A、B、A、B;结果必须是

人口
蜜蜂A 10 12 5 22
蜜蜂B 20 16 19 36
全部的 10 30 32 28 21 24 41 58

示例 2:
如果测量值是 A、B、A、A、A、B;结果必须是

人口
蜜蜂A 10 12 5 22
蜜蜂B 20 16 19 36
全部的 10 30 32 25 42 38 41 58

代码

我尝试使用union,但我无法让它工作,因为它保留了 2 个单独的表而不是一个。

bucket1 = from(bucket: "beeA")
  |> range(start: 0)
  |> filter(fn: (r) => r["_measurement"] == "population")
  |> filter(fn: (r) => r["_field"] == "pop")
  |> sort(columns: ["_time"])

bucket2 = from(bucket: "beeB")
  |> range(start: 0)
  |> filter(fn: (r) => r["_measurement"] == "population")
  |> filter(fn: (r) => r["_field"] == "pop")
  |> sort(columns: ["_time"])

union(tables: [bucket1, bucket2])

标签: influxdbinfluxdb-2flux-influxdb

解决方案


您可以尝试删除, |> sort(columns: ["_time"])。还要检查|> range(start: 0). 您可以提供不同的时间范围,最后检查您拥有数据的选定时间范围。


推荐阅读