聚合与分组
跨序列计算聚合结果,设置分组标签、分位数和输出限制。
两种方言都支持不分组的聚合。.by() 保留指定标签,.without() 移除指定标签。在聚合之后选择其中一种方式,不要对同一个结果同时调用两者。
from metricraft import QueryBuilder as Q
aggregate = Q.from_metric("requests_total").rate("5m").sum()
by_service = aggregate.by("service")
without_instance = aggregate.without("instance")
print(by_service.build(mode="promql"))
print(without_instance.build(mode="promql"))
两种分组形式共享原始表达式。额外的聚合输入(*others)需要 MetricsQL。下方数字参数的建议范围描述后端中有用的取值域;SDK 没有强制限制的地方会明确说明。
方法与参数
QueryBuilder
aggregate()选择允许列表中的非参数化聚合。需要分组时,对返回表达式调用 by() 或 without()。
QueryBuilder.aggregate(op: str, *others: ScalarInput) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
opstr必填 | 可选 sum、avg、min、max、count、stddev、stdvar、group、any、median、mode、mad、distinct、geomean、histogram、outliers_iqr、share、sum2、zscore。参数化聚合请使用专用方法。 |
*othersQueryBuilder, ...可变参数 | 额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
any()从每个 MetricsQL 聚合分组选择一条序列。仅限 MetricsQL
avg()跨每个聚合分组中的序列计算算术平均值。
bottomk()在每个聚合分组中保留样本值最小的 k 条序列,并保留所选序列的标签。
bottomk_avg()保留 MetricsQL 查询区间内算术平均值最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.bottomk_avg(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
bottomk_last()保留 MetricsQL 查询区间内最后一个值最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.bottomk_last(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
bottomk_max()保留 MetricsQL 查询区间内最大值最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.bottomk_max(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
bottomk_median()保留 MetricsQL 查询区间内中位数最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.bottomk_median(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
bottomk_min()保留 MetricsQL 查询区间内最小值最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.bottomk_min(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
by()对未分组聚合按这些标签分组,移除其他标签;空标签列表形成一个分组。
QueryBuilder.by(*labels: str) -> QueryBuilder
对未分组聚合只调用一次 by() 或 without()。需要两种形式时,从同一聚合分别派生。两种方言都允许不分组。
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
*labelsstr, ...可变参数 | 分别传入标签名。分组与匹配列表不能重复;允许空分组列表,具体函数的参数个数由 Rust 检查。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
示例
from metricraft import QueryBuilder as Q
Q.from_metric("requests_total").rate("5m").sum().by("job").build(mode="promql")count()跨每个聚合分组中的序列计算数量。
count_values()按样本值统计序列数量,将每个不同的值放入输出标签。
distinct()跨每个聚合分组中的序列计算不同值的数量。仅限 MetricsQL
geomean()跨每个聚合分组中的序列计算几何平均值。仅限 MetricsQL
group()对每个非空聚合分组返回 1。
histogram()根据分组内各序列的值构建 MetricsQL 直方图。仅限 MetricsQL
limit()为聚合添加 MetricsQL 的输出序列数量限制后缀。仅限 MetricsQL
limit_ratio()确定性地选择一定比例的序列。负比例选择对应的补集。仅限 PromQL
limitk()确定性地选择最多 k 条序列。Prometheus 需要启用实验函数功能。
mad()跨每个聚合分组中的序列计算中位绝对偏差。仅限 MetricsQL
max()跨每个聚合分组中的序列计算最大值。
median()跨每个聚合分组中的序列计算中位数。仅限 MetricsQL
min()跨每个聚合分组中的序列计算最小值。
mode()跨每个聚合分组中的序列计算众数。仅限 MetricsQL
outliers_iqr()保留位于四分位距异常值边界之外的序列。仅限 MetricsQL
outliers_mad()保留偏离分组中位数超过容差倍数中位绝对偏差的序列。仅限 MetricsQL
outliersk()保留请求区间内偏离分组均值最大的最多 k 条序列。仅限 MetricsQL
quantile()跨每个聚合分组中的序列计算分位数。
quantiles()跨序列计算多个 MetricsQL 分位数,并用输出标签区分各分位数。仅限 MetricsQL
QueryBuilder.quantiles(label: str, *quantiles: ScalarInput) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
labelstr必填 | 不含控制字符的非空标签名。方言要求时,构建器会为名称加引号。 |
*quantilesint | float | QueryBuilder, ...可变参数 | 一个或多个分位数,通常各自在 [0, 1] 内。PromQL histogram_quantiles 最多接受 10 个,MetricsQL 支持自己的可变参数形式。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
stddev()跨每个聚合分组中的序列计算总体标准差。
stdvar()跨每个聚合分组中的序列计算总体方差。
sum()跨每个聚合分组中的序列计算总和。
sum2()跨每个聚合分组中的序列计算平方和。仅限 MetricsQL
topk()在每个聚合分组中保留样本值最大的 k 条序列,并保留所选序列的标签。
topk_avg()保留 MetricsQL 查询区间内算术平均值最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.topk_avg(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
topk_last()保留 MetricsQL 查询区间内最后一个值最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.topk_last(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
topk_max()保留 MetricsQL 查询区间内最大值最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.topk_max(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
topk_median()保留 MetricsQL 查询区间内中位数最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.topk_median(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
topk_min()保留 MetricsQL 查询区间内最小值最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
QueryBuilder.topk_min(k: ScalarInput, *, other: Optional[str]=None) -> QueryBuilder
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
kint | float | QueryBuilder必填 | 选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。 |
otherstr | None默认值: None | 可选 'label=value' 赋值,用来标识合并后的剩余序列,None 时省略。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
without()移除这些标签和指标名后,对未分组聚合分组。同一聚合不能再使用 by()。
QueryBuilder.without(*labels: str) -> QueryBuilder
对未分组聚合只调用一次 by() 或 without()。两种方言都允许不分组。
| 参数 / 类型 | 含义与可接受的值 |
|---|---|
*labelsstr, ...可变参数 | 分别传入标签名。分组与匹配列表不能重复;允许空分组列表,具体函数的参数个数由 Rust 检查。 |
返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。
示例
from metricraft import QueryBuilder as Q
Q.from_metric("up").sum().without("instance").build(mode="promql")