postgresql 来自$__timeFilter的子实体附加时间

wztqucjr  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(138)

我想在Grafana的$__timeFilter中减去额外的时间。例如,如果我选择了“最后7天”,我想运行两个查询进行比较,一个查询提供了过去7天的平均CPU利用率,另一个查询提供了现在的平均CPU利用率()-14 d到现在()-7 d。这是动态的。我可以得到它为6小时,2天,或任何选择。
我的数据库是TimescaleDB和Grafana版本8.3.5
编辑查询是

select avg(cpu) from cpu_utilization where $__timeFilter(timestamp)

无论在Grafana的时间过滤器中选择了什么,查询都会被相应地处理
现在Grafana理解了这个查询,它变成了如下。如果我选择过去24小时

select avg(cpu) from cpu_utilization where timestamp BETWEEN '2022-09-07 05:32:10' and '2022-09-08 05:32:10'

这是正常的行为。现在,我希望如果我选择过去24小时,这个查询的行为,因为它是,但一个额外的查询成为

select avg(cpu) from cpu_utilization where timestamp BETWEEN '2022-09-06 05:32:10' and '2022-09-07 05:32:10'

(我只是不想它的最后24小时,但在过滤器中选择的任何相对时间段)
答案:https://stackoverflow.com/a/73658919/14817486

p8ekf7hl

p8ekf7hl1#

您可以使用全局变量$__to$__from
例如,${__from:date:seconds}会给予你一个时间戳,单位为秒。然后,您可以从中减去7天(= 604800秒),并在查询的WHERE子句中使用它。根据您的SQL方言,可能使用TIMESTAMP()TO_TIMESTAMP()或类似的语言。看起来像这样:

[...] WHERE timestamp BETWEEN TO_TIMESTAMP(${__from:date:seconds}-604800) AND TO_TIMESTAMP(${__to:date:seconds}-604800) [...]
r8xiu3jd

r8xiu3jd2#

有趣的问题!如果我理解正确的话,您可以使用timestamp列作为引用,因为grafana已经在通过此过滤比较查询。所以你可以让min(timestamp)max(timestamp)知道你的周期的限制,然后从它构建一些东西。
比如min(timestamp) - INTERVAL '7 days'会给予你上一个范围的开始,而max(timestamp) - INTERVAL '7 days'会提供最终范围。

相关问题