【问题标题】:How to merge (join) two tables in a specific way in Grafana using InfluxDB flux query?如何使用 InfluxDB 通量查询在 Grafana 中以特定方式合并(连接)两个表?
【发布时间】:2020-09-22 23:18:02
【问题描述】:

格拉法纳:7.1.5 涌入数据库: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, 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}))

我已尝试以各种方式加入这些表格,但我所做的一切都无法正常工作以获取我正在寻找的具有 4 列的一张表格。

有人对如何实现这一目标有想法吗?谢谢!

【问题讨论】:

    标签: join merge grafana influxdb fluxlang


    【解决方案1】:

    我曾与帮助我想出解决方案的 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 中,我必须应用“按名称过滤”转换来隐藏显示的“结果”和“表格”列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多