带有 QuestDB 数据源的名称和值的 Grafana 变量下拉列表

问题描述 投票:0回答:1

我正在使用 Grafana 和 QuestDB 数据源插件。我想根据查询定义一个变量,就像这里的查询

select symbol, first(price) as price from trades
where symbol like '%BTC%'
符号 价格
DOGE-BTC 0.00000204
ETH-BTC 0.05551
BTC-USDT 37779.62
SOL-BTC 0.0015282
MATIC-BTC 0.00002074
BTC-USDC 60511.1
AVAX-BTC 0.00056124
XLM-BTC 0.00000314
LTC-BTC 0.001858
DOT-BTC 0.0001379
ADA-BTC 0.00001026
UNI-BTC 0.0001715
BTC-美元 39269.98

当我使用该查询定义变量时,下拉列表仅包含

price
列。我想要的是将
symbol
列显示为下拉可见标签,但在幕后发送
price
列作为将在图表的 SQL 中插值的实际值。

使用 postgresql 数据源,我读到我可以使用特殊名称

__text
__value
为列添加别名,如下所示:

select symbol as __name, first(price) as __value from trades
where symbol like '%BTC%'

如果我使用 postgresql 数据源,即使指向 QuestDB 实例,这也是有效的。但是,对于 QuestDB 数据源,别名将被忽略。如果可能的话,我想继续使用 QuestDB 数据源,因为它具有更好的集成,但我需要解决此问题。

database time-series grafana questdb
1个回答
0
投票

我们可以利用Grafana 的正则表达式变量过滤器。技巧是以我们可以通过正则表达式轻松解析的格式从变量定义中获取结果。

目标是拥有一种可以使用正则表达式解析为两个名为

text
value
的捕获组的格式。所以我能做的就是将我的两个表列连接为一个字符串,并使用永远不会出现在这些列上的分隔符。

with t as (
  select symbol, first(price) as price from trades where symbol like '%BTC%'
)
select concat(symbol,'#',price) from t

现在在变量定义上我可以输入这样的正则表达式过滤器

/(?<text>[^#]+)\#(?<value>.*)/

它将首先捕获从开头到

#
(名称为
text
)的所有内容以及
#
之后的所有内容,直到名称为
value
的结尾。这样,Grafana 将在下拉列表中使用
name
,但当变量在图表中的任何位置使用时,则使用
value

© www.soinside.com 2019 - 2024. All rights reserved.