代码之家  ›  专栏  ›  技术社区  ›  Jürgen Zornig

显示grafana中的小时平均值(histogramm)

  •  0
  • Jürgen Zornig  · 技术社区  · 5 年前

    给定每小时包含数据点的(电力)市场数据的时间序列,我想显示一个条形图,其中包含每小时数据的所有时间/时间帧平均值,这样分析师就可以轻松地将实际价格与所有时间平均值(一天中哪个时间最贵/最便宜)进行比较。

    我们用cratedb作为后端,它在grafana中就像postgres源一样使用。

    SELECT
      extract(HOUR from start_timestamp) as "time",
      avg(marketprice) as value
    FROM doc.el_marketprices
    GROUP BY 1
    ORDER BY 1
    

    time    value
    23.00   23.19
    22.00   25.38
    21.00   29.93
    20.00   31.45
    19.00   34.19
    18.00   41.59
    17.00   39.38
    16.00   35.07
    15.00   30.61
    14.00   26.14
    13.00   25.20
    12.00   24.91
    11.00   26.98
    10.00   28.02
    9.00    28.73
    8.00    29.57
    7.00    31.46
    6.00    30.50
    5.00    27.75
    4.00    20.88
    3.00    19.07
    2.00    18.07
    1.00    19.43
    0       21.91
    

    经过几个小时摆弄柱状图,直方图模式,热图面板等等,我只是不能画一天中简单的几个小时的Grafana的直方图。我非常感谢任何关于如何使用任何小组来完成这项工作的建议。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Jan Garaj    5 年前
    1. 您的查询没有为Grafana返回正确的时间序列数据-时间字段不是有效的时间戳,因此不要仅提取 start_timestamp (我希望是 timestamp 数据类型和值以UTC为单位)
    2. 添加位置 time 条件-使用Grafana的宏 __timeFilter
    3. 使用Grafana的宏 $__timeGroupAlias 按小时分组
    SELECT
      $__timeGroupAlias(start_timestamp,1h,0),
      avg(marketprice) as value
    FROM doc.el_marketprices
    WHERE $__timeFilter(start_timestamp)
    GROUP BY 1
    ORDER BY 1
    

    SELECT
      $__timeGroupAlias(start_timestamp,1h,0),
      extract(HOUR from start_timestamp) as "metric",
      avg(marketprice) as value
    FROM doc.el_marketprices
    WHERE $__timeFilter(start_timestamp)
    GROUP BY 1
    ORDER BY 1
    

    然后将其可视化为直方图。记住Grafana是为时间序列数据指定的,所以您需要适当的时间戳(不仅是提取的小时数,最终您可以伪造它),否则您将很难在Grafana中可视化非时间序列数据。这个第二个查询可能无法正常工作,但它至少给了您一些想法。