You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flux执行union与group操作后仍存两表,如何保留目标表?

解决思路与修改方案

你的问题根源在于代码中过早调用了yield(name: "result"),导致中间状态的union表被输出,同时后续处理的最终表也会被输出,所以出现了两个表。只需要调整yield的位置,让它仅输出最终处理完成的表即可。

修改后的代码

data = from(bucket: "home")
  |> range(start: -7d)
  |> filter(fn: (r) => r["_field"] == "BATTERY_CHARGE"  or r["_field"] == "BATTERY_DISCHARGE")
  |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> map(fn: (r) => ({r with "Battery_Discharge": r.BATTERY_DISCHARGE / 12.0}))
  |> map(fn: (r) => ({r with "Battery_Charge": r.BATTERY_CHARGE / 12.0}))
  |> keep(columns: ["_time", "Battery_Charge", "Battery_Discharge"])

Discharge_Sum = data
  |> aggregateWindow(column: "Battery_Discharge", every: 1d, offset: -8h, fn: sum)

Charge_Sum = data
  |> aggregateWindow(column: "Battery_Charge", every: 1d, offset: -8h, fn: sum)

union(tables: [Discharge_Sum, Charge_Sum])
  |> group(columns: ["_time"], mode: "by")
  |> sort(columns: ["Battery_Charge"])
  |> fill(column: "Battery_Discharge", usePrevious: true)
  |> tail(n: 1)
  |> group()
  |> tail(n: 7)
  |> drop(fn: (column) => column =~ /^(_start|_stop|_measurement|location|region)/)
  |> rename(columns: {Battery_Discharge: "Battery Discharge", Battery_Charge: "Battery Charge"})
  |> yield(name: "result") // 将yield移到最后,仅输出最终处理后的表

关键说明

  • 原来的代码在union之后立刻yield,会输出一份未完成整合的中间表;后续对这个流继续处理后,又会输出最终的整合表,所以出现了两个表。
  • 将yield(name: "result")移到整个处理链的末尾,就只会输出你需要的、已经完成求和、整合、过滤后的最终表,中间的union表不会被输出。
  • 若你在InfluxDB的Data Explorer中操作,无需额外设置,调整yield位置即可解决核心问题。

内容的提问来源于stack exchange,提问作者PradoEagle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:15:38