postgre将PromQL转换为SQL



我需要使用timescaleDB转换器将我的prometheus指标转换为pgsql,我试图改变我的查询从promQL到SQL。我有很多查询,几乎都做了,但我卡在这个,现在我可以将这个promQL查询转换为SQL:

sum(sum(increase(my_metric{}[1h])) by (label) > bool 0)

我的表是这样的:(ordered by label)

time(timestamptz), value(double), label(integer)
=================================================
2021-02-17 21:50:01.690092+00  3.1    1
2021-02-17 21:45:01.390661+00  4.1    1
2021-02-17 21:50:01.690092+00  4.5    2
2021-02-17 21:45:01.390661+00  4.5    2
2021-02-17 21:50:01.690092+00  1.23   3
2021-02-17 21:45:01.390661+00  4.46   3

我需要的是一个计数器,在时间内检查每个标签的值,如果值被改变,那么它应该添加一个计数器。使用promQL,这是一个简单的任务:
sum(sum(increase(my_metric{}[5m])) by (label) > bool 0)甚至:sum(max(increase(my_metric{}[5m])) by (label) > bool 0)

对于上面的数据样本结果应该是2,它应该为标签1和3添加一个,标签2在这段时间内没有变化,所以它不应该添加任何计数器

在Postgres中,您可以使用lag()和累积计数:

select t.*,
count(*) filter (where prev_value is distinct from value) over (order by time) 
from (select t.*,
lag(value) over (order by time) as prev_value
from t
) t

最新更新