如何解决如何使用InfluxDB流量查询在Grafana中以特定方式合并联接两个表?
Grafana:7.1.5 InfluxDB:1.8
我目前在Grafana中有三个单独的表格面板,每个查询之间的唯一区别是时间范围(年,月,日)。我想将这三个表合并为一个表,其中测量值分为三列(每个时间范围一列)。
更明确地说,我目前拥有的是:
- Table1列:[Tag1 + Tag2,_value],其中_value是该单位 年
- Table2列:[Tag1 + Tag2,_value],其中_value是单位 这个月
- Table3列:[Tag1 + Tag2,_value],其中_value是该单位 天
我想要的是:
表格列:[Tag1 + Tag2,Table1_value(年份),Table2_value(月份),Table3_value(日期)]
这些是我的查询
import "date"
thisYearSoFar = date.truncate(t: Now(),unit: 1y)
thisMonthSoFar = date.truncate(t: Now(),unit: 1mo)
thisDaySoFar = date.truncate(t: Now(),unit: 1d)
from(bucket: "consumption")
|> range(start: thisYearSoFar,stop: Now())
|> filter(fn: (r) => r._measurement == "stuff" and r._field == "units" and r._value > 0)
|> group(columns: ["datacenter","tenant"])
|> sum(column: "_value")
|> map(fn: (r) => ({r with _value: r._value / 4.0}))
from(bucket: "consumption")
|> range(start: thisMonthSoFar,"tenant"])
|> sum(column: "_value")
|> map(fn: (r) => ({r with _value: r._value / 4.0}))
from(bucket: "consumption")
|> range(start: thisDaySoFar,"tenant"])
|> sum(column: "_value")
|> map(fn: (r) => ({r with _value: r._value / 4.0}))
我尝试过以各种方式连接这些表,但是我所做的一切都无法正常工作,让我得到一个我要寻找的具有4列的表。
有人对如何实现这一目标有想法吗?谢谢!
解决方法
我与Flux开发人员合作,帮助我提出了解决方案:
import "date"
sum_over_range = (unit) =>
from(bucket: "consumption")
|> range(start: date.truncate(t: now(),unit: unit))
|> filter(fn: (r) => r._measurement == "stuff" and r._field == "units" and r._value > 0)
|> group(columns: ["datacenter","tenant"])
|> sum()
|> map(fn: (r) => ({r with _value: r._value / 4.0,_field: string(v: unit),_time: 0}))
union(tables: [sum_over_range(unit: 1y),sum_over_range(unit: 1mo),sum_over_range(unit: 1d)
])
|> group(columns: ["datacenter","tenant"])
|> pivot(rowKey: ["_time"],columnKey: ["_field"],valueColumn: "_value")
|> drop(columns: ["_time","_start","_stop","result"])
|> group()
然后在Grafana中,我还必须应用“按名称过滤”转换来隐藏显示的“结果”和“表”列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。