【问题标题】:How do I use a cumulative summing variable in a grafana query?如何在 grafana 查询中使用累积求和变量?
【发布时间】:2019-09-21 12:54:10
【问题描述】:

我正在设置 Grafana 和 MariaDB 的组合。我的目标之一是将表中值的累积总和显示为 Grafana 时间序列。

我似乎在 SQL 查询中需要一个求和变量。

这样的查询有效,如果我在数据库中手动输入(例如在 HeidiSQL 中)。当我将查询方案接管到 Grafana Web 界面时,它不起作用

示例:

我有一张这样的桌子

`ID` INT(11) NOT NULL AUTO_INCREMENT,
`Datum` DATE NOT NULL,
'Sachkosten` INT(11) NOT NULL

我想显示 Sachkosten 的累积总和。当我执行时,它在数据库上手动运行:

set @csum := 0;
SELECT
    UNIX_TIMESTAMP(Datum) as time_sec,
    Datum,
    Sachkosten as value,
   'Sachkosten' as metric,
   (@csum := @csum + Sachkosten) as cumulative_sum
FROM aufwand
ORDER BY Datum ASC

上述直接在数据库上按预期工作:第五列是第三列的累积和:

"1569801600"    "2019-09-30"    "-6000" "Sachkosten"    "-6000"
"1569801600"    "2019-09-30"    "35000" "Sachkosten"    "29000"
"1572220800"    "2019-10-28"    "-4000" "Sachkosten"    "25000"

当我在 Grafana 中输入相同的内容时,我在使用变量 @csum 时遇到错误。在上面的例子中:

Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT
UNIX_TIMESTAMP(Datum) as time_sec,
Datum,
Sachkosten as value' at line 2

我们这里有一些英雄知道如何让这些查询变量在 Grafana 中工作吗?或者其他方式来处理这个累积总和?

【问题讨论】:

    标签: mysql sql mariadb grafana


    【解决方案1】:

    我猜你不能在一个查询中组合两个语句。尝试在子查询中设置变量:

    SELECT UNIX_TIMESTAMP(Datum) as time_sec, Datum, Sachkosten as value,
           'Sachkosten' as metric,
           (@csum := @csum + Sachkosten) as cumulative_sum
    FROM aufwand CROSS JOIN
         (SELECT @csum := 0) params
    ORDER BY Datum ASC;
    

    或者,也许这会起作用:

    SELECT UNIX_TIMESTAMP(Datum) as time_sec, Datum, Sachkosten as value,
           'Sachkosten' as metric,
           SUM(Sachkosten) OVER (ORDER BY Datum) as cumulative_sum
    FROM aufwand CROSS JOIN
         (SELECT @csum := 0) params
    ORDER BY Datum ASC;
    

    请注意,在较新版本的 MySQL 中,ORDER BY 可能不会影响累积和的排序。您需要一个带有ORDER BY 的子查询来确保这一点。

    【讨论】:

    • 谢谢!第一个解决方案直接在 Grafana 中运行。 (我只需要删除不能在 Grafana 中工作的“基准”。总和在那之后直接起作用)。
    • @JanBrinkhaus 请将 Gordon Linoff 的答案设为 Mask 作为答案。
    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多