InfluxDB:合并时间序列列并将它们相乘

问题描述 投票:0回答:1

我尝试连接两个表:电流和电压 两者是同时测量的,只有几毫秒的延迟。当我尝试使用联合合并他们的列时,我得到很多空值。

我的目标是将两列相乘,以计算幂。但因此它们必须保持一致。我怎样才能做到这一点,然后使用 Flux 将它们相乘。

voltages = from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "power_supply")
  |> filter(fn: (r) => r["device"] == "multi_1")
  |> filter(fn: (r) => r["_field"] == "ch1_measured_voltage_(V)")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> duplicate(column: "_value", as: "voltage")
  |> keep(columns: ["_time", "voltage"])
  |> yield(name: "voltage")

currents = from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "power_supply")
  |> filter(fn: (r) => r["device"] == "multi_1")
  |> filter(fn: (r) => r["_field"] == "ch1_measured_current_(A)")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> duplicate(column: "_value", as: "current")
  |> keep(columns: ["_time", "current"])
  |> yield(name: "current")


comb = union(tables: [voltages, currents])
 |> sort(columns: ["_time"], desc: false)
 |> yield(name: "mean")
database influxdb flux
1个回答
1
投票

你可以使用pivot来做到这一点,并记得使用pivot后排序:

from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "power_supply")
  |> filter(fn: (r) => r["device"] == "multi_1")
  |> filter(fn: (r) => r["_field"] == "ch1_measured_voltage_(V)" or r["_field"] == "ch1_measured_current_(A)")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> sort(columns: ["_time"])
  |> map(fn: (r) => ({r with _value: r["ch1_measured_voltage_(V)"] * r["ch1_measured_current_(A)"]}))
  |> yield(name: "mean")
© www.soinside.com 2019 - 2024. All rights reserved.