【发布时间】:2021-12-06 19:08:38
【问题描述】:
背景:
我正在使用 Telegraf、QuestDB 和 Grafana 来可视化高频时间序列数据。为了减少 Grafana 查询长时间范围数据的时间,我需要利用 QuestDB 的 SAMPLE BY 函数。
目标:
我需要根据利用 Grafana 的系统变量 $__interval_ms 和任意数字的简单数学方程使我的 QuestDB 查询动态化。
预期:
在下面的查询中,我试图利用 Grafana 的系统变量来使我的查询动态化。我希望 QuestDB 能够理解并执行完成 SAMPLE BY 函数所需的数学运算。
SELECT ts time, last(x), last(y), last(z)
FROM accelerometer
WHERE $__timeFilter(ts)
SAMPLE BY ($__interval_ms/1000)T
Grafana 处理此查询后,将其作为...传递给 QuestDB。
SELECT ts time, last(x), last(y), last(z)
FROM accelerometer
WHERE ts BETWEEN '2021-10-12T00:00:00.000Z' AND '2021-10-12T01:00:00.000Z'
SAMPLE BY (30000/1000)T
注意:如果我将 SAMPLE BY (300000/1000)T 替换为 SAMPLE BY 30T,查询将按预期执行。
结果:
QuestDB 无法识别我希望执行数学运算并失败。
我已采取的步骤:
我已尝试执行以下解决方法:
- 通过
DECLARE @sampler声明变量——失败 - 在查询前通过
WITH sampler as (SELECT concat($__interval_ms / 1000, 'T')执行WITH语句,然后在末尾通过SAMPLE BY sampler引用sampler-- 失败 - 在 Grafana 变量中执行数学运算(通过其标准仪表板变量 GUI)- 失败
- 在
SAMPLE BY函数中嵌入SELECT语句 -- 失败
到目前为止,我完全没有运气。
如何在 QuestDB 中存储变量(类似于 Postgres 中的 DECLARE)或在 SAMPLE by 函数中执行数学运算?或者有没有其他我没有想到的方法来解决这个问题?
【问题讨论】: