将 PromQL 转换为 SQL
Converting PromQL to SQL
我需要使用 timescaleDB 转换器将我的 prometheus 指标转换为 pgsql,
我正在尝试将我的查询从 promQL 更改为 SQL。我有很多查询,几乎都完成了,但我卡在了这个问题上,现在我不能将这个 promQL 查询转换为 SQL:
sum(sum(increase(my_metric{}[1h])) by (label) > bool 0)
我的table是这样的:(按标签排序)
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
我需要使用 timescaleDB 转换器将我的 prometheus 指标转换为 pgsql, 我正在尝试将我的查询从 promQL 更改为 SQL。我有很多查询,几乎都完成了,但我卡在了这个问题上,现在我不能将这个 promQL 查询转换为 SQL:
sum(sum(increase(my_metric{}[1h])) by (label) > bool 0)
我的table是这样的:(按标签排序)
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