是否有一种方法可以通过传递包含每个系列相应最大值的即时矢量来实现最大夹紧?
在promQL中,使用函数clamp_max,可以用标量值钳住即时向量的值,但是如果传递的是即时向量而不是标量,则会得到错误
在瞬时向量上使用函数scalar()
仅在瞬时向量只包含一个值
给定具有相同标签的即时向量v和max_v,这使得技巧
(v <= bool max_v) * v + (v > bool max_v) * max_v
当使用bool
后的比较运算符时,它们的表达式将相应地返回0 (false
)或1 (true
)。
考虑整个表达式,对于每个序列,只有一个项(v <= bool max_v)
或(v > bool max_v)
可以是true
,因此对于每个序列,它将返回v的值或max_v的最大值。
用max_v
序列夹紧v
时间序列最简单的解决方案如下:
(v < max_v) or max_v
这个查询的工作方式如下:
v < max_v
只留下小于max_v
的值。(...) or max_v
用max_v
的值填补步骤1的空白。
不那么俗套的方法:
考虑v
为初始度量,max_v
为最大箝位向量。
可以使用and
和or
操作符的组合来实现瞬时矢量的箝位:
v and (v < max_v) or max_v
对于每个时隙,如果v
的值小于max_v
的值,则取max_v
的值。