在 MYSQL 查询中使用变量 Grafana 返回列名而不是指标

Posted

技术标签:

【中文标题】在 MYSQL 查询中使用变量 Grafana 返回列名而不是指标【英文标题】:Use variable in MYSQL query Grafana Returns Column Name instead of metrics 【发布时间】:2021-01-24 02:54:26 【问题描述】:

我在 Grafana 中创建了一个名为 $mypair 的变量,我手动添加了一些选项,我可以在仪表板中查看这些选项。我选择一个选项(例如:AUDCAD)。

在图表设置的查询部分,我输入以下查询:

SELECT UNIX_TIMESTAMP(time) AS time, LEFT([[mypair]], 3) FROM allpairs

我试图从上面的查询中完成的实际上是在查询下面

SELECT UNIX_TIMESTAMP(time) AS time, AUD FROM allpairs 

我试图从 $mypair 变量中获取前 3 个字母,以便构建图形。但我没有成功。当我在图形设置的查询框上设置第一个查询时,它会给出以下格式的表格

2020-09-04 02:00:00    AUD
2020-09-04 03:00:00    AUD
2020-09-04 04:00:00    AUD
2020-09-04 05:00:00    AUD
2020-09-04 06:00:00    AUD
2020-09-04 07:00:00    AUD

但我需要的是使用 $mypair 变量的前 3 个字母选择列,因此输出如下

2020-09-04 02:00:00    63
2020-09-04 03:00:00    63
2020-09-04 04:00:00    62
2020-09-04 05:00:00    62
2020-09-04 06:00:00    62
2020-09-04 07:00:00    60

我会接受反馈。

【问题讨论】:

您看到的查询输出是 mysql 查询的正确行为。当我们说SELECT LEFT('AUDCAD', 3) FROM allpairs时,MySQL会选择AUDCAD字符串的前三个字符,即AUD。它不会使用 AUD 作为列名。要实现您想要做的事情,请使用 MySQL 准备好的语句。 @robert 谢谢你的例子,请你给一些关于mysql准备好的语句的指点或例子 您可以查看此链接dev.mysql.com/doc/refman/5.7/en/sql-prepared-statements.html 【参考方案1】:

其实我已经在mysql中使用了Views,完成了我想要的。

就我而言,我创建了如下视图

CREATE VIEW `AUDCAD` AS SELECT UNIX_TIMESTAMP(time) AS "time", `AUD`, `CHF` AS FROM `allpairs` ORDER by time ASC;

然后在 Grafana 中使用以下查询

SELECT * FROM $mypair

【讨论】:

在我的情况下,上述解决方法有效,但不确定它是否解决了 Grafana 中的真正问题。

以上是关于在 MYSQL 查询中使用变量 Grafana 返回列名而不是指标的主要内容,如果未能解决你的问题,请参考以下文章

Grafana mysql 多值变量

Grafana 用户变量

Grafana - 如何为 Mysql 数据源创建 sql 查询部分变量/宏

Grafana 仪表板变量 - 在基于查询的变量中处理 NULL 值

在 Prometheus 查询中使用 Grafana 变量

在 grafana 查询中添加动态变量