首页 > 解决方案 > QuestDB - 在 SAMPLE BY 函数中声明变量或执行数学运算

问题描述

背景:

我正在使用TelegrafQuestDBGrafana来可视化高频时间序列数据。为了减少 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)TSAMPLE BY 30T,查询将按预期执行。

结果:

QuestDB 无法识别我希望执行数学运算并失败。

我已采取的步骤:

我已尝试执行以下操作作为解决方法:

  1. 通过 -- 声明一个变量DECLARE @sampler失败
  2. 在查询前执行WITH语句 via WITH sampler as (SELECT concat($__interval_ms / 1000, 'T'),然后sampler在末尾引用 via SAMPLE BY sampler-- failed
  3. 在 Grafana 变量中执行数学运算(通过他们的标准仪表板变量 GUI)——失败
  4. 在函数中嵌入SELECT语句SAMPLE BY——失败

到目前为止,我完全没有运气。

如何在 QuestDB 中存储变量(类似于DECLAREPostgres)或在函数中执行数学运算SAMPLE by?还是有另一种我没有想到的解决这个问题的方法?

标签: sqlgrafanaquestdb

解决方案


QuestDB 从 6.0.9 开始无法解析非常数SAMPLE BY周期,这是一种可以SAMPLE BY 100s但不能像SAMPLE BY 1000/10s.


推荐阅读