如何使用 InfluxDB 流量查询以特定方式在 Grafana 中合并(连接)两个表?
How to merge (join) two tables in a specific way in Grafana using InfluxDB flux query?
格拉法纳:7.1.5
流入数据库:1.8
我目前在 Grafana 中有三个单独的 table 面板,其中每个查询之间的唯一区别是时间范围(年、月、日)。我想将这三个 table 合并为一个,其中测量值分为三列(每个时间范围一列)。
更明确地说,我目前拥有的是:
- Table1 列:[Tag1+Tag2, _value] 其中 _value 是单位
年
- Table2 列:[Tag1+Tag2, _value] 其中 _value 是单位
这个月
- Table3 列:[Tag1+Tag2, _value] 其中 _value 是单位
天
我想要的是:
Table 列:[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, 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: thisDaySoFar, 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}))
我试过以各种方式加入这些 table,但我所做的一切都无法正常工作,无法找到我正在寻找的具有 4 列的 table。
有人知道如何实现这个吗?谢谢!
我与一位 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 中,我必须应用 'Filter by name' 转换来隐藏显示的 'result' 和 'table' 列。
格拉法纳:7.1.5 流入数据库:1.8
我目前在 Grafana 中有三个单独的 table 面板,其中每个查询之间的唯一区别是时间范围(年、月、日)。我想将这三个 table 合并为一个,其中测量值分为三列(每个时间范围一列)。
更明确地说,我目前拥有的是:
- Table1 列:[Tag1+Tag2, _value] 其中 _value 是单位 年
- Table2 列:[Tag1+Tag2, _value] 其中 _value 是单位 这个月
- Table3 列:[Tag1+Tag2, _value] 其中 _value 是单位 天
我想要的是:
Table 列:[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, 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: thisDaySoFar, 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}))
我试过以各种方式加入这些 table,但我所做的一切都无法正常工作,无法找到我正在寻找的具有 4 列的 table。
有人知道如何实现这个吗?谢谢!
我与一位 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 中,我必须应用 'Filter by name' 转换来隐藏显示的 'result' 和 'table' 列。