参考手册

聚合与分组

跨序列计算聚合结果,设置分组标签、分位数和输出限制。

两种方言都支持不分组的聚合。.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
仅限 MetricsQL
QueryBuilder.any(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

avg()跨每个聚合分组中的序列计算算术平均值。
QueryBuilder.avg(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

bottomk()在每个聚合分组中保留样本值最小的 k 条序列,并保留所选序列的标签。
QueryBuilder.bottomk(k: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
kint | float | QueryBuilder必填选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

bottomk_avg()保留 MetricsQL 查询区间内算术平均值最小的 k 条序列,可选收集其余序列。仅限 MetricsQL
仅限 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
仅限 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
仅限 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
仅限 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
仅限 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()跨每个聚合分组中的序列计算数量。
QueryBuilder.count(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

count_values()按样本值统计序列数量,将每个不同的值放入输出标签。
QueryBuilder.count_values(label: StringInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
labelstr必填不含控制字符的非空标签名。方言要求时,构建器会为名称加引号。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

distinct()跨每个聚合分组中的序列计算不同值的数量。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.distinct(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

geomean()跨每个聚合分组中的序列计算几何平均值。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.geomean(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

group()对每个非空聚合分组返回 1。
QueryBuilder.group(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

histogram()根据分组内各序列的值构建 MetricsQL 直方图。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.histogram(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

limit()为聚合添加 MetricsQL 的输出序列数量限制后缀。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.limit(count: Number) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
countint | float必填[0, 4294967295] 内的整数值聚合输出限制(无符号 32 位);拒绝非有限值、小数值和 bool。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

limit_ratio()确定性地选择一定比例的序列。负比例选择对应的补集。仅限 PromQL
仅限 PromQLPrometheus 实验功能
QueryBuilder.limit_ratio(ratio: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
ratioint | float | QueryBuilder必填[-1, 1] 内的采样比例,负值请求补集。范围外的值交由后端处理。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

limitk()确定性地选择最多 k 条序列。Prometheus 需要启用实验函数功能。
Prometheus 实验功能
QueryBuilder.limitk(k: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
kint | float | QueryBuilder必填选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

mad()跨每个聚合分组中的序列计算中位绝对偏差。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.mad(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

max()跨每个聚合分组中的序列计算最大值。
QueryBuilder.max(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

median()跨每个聚合分组中的序列计算中位数。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.median(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

min()跨每个聚合分组中的序列计算最小值。
QueryBuilder.min(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

mode()跨每个聚合分组中的序列计算众数。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.mode(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

outliers_iqr()保留位于四分位距异常值边界之外的序列。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.outliers_iqr() -> QueryBuilder

无参数。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

outliers_mad()保留偏离分组中位数超过容差倍数中位绝对偏差的序列。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.outliers_mad(tolerance: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
toleranceint | float | QueryBuilder必填中位绝对偏差的乘数,应使用非负值,由后端求值。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

outliersk()保留请求区间内偏离分组均值最大的最多 k 条序列。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.outliersk(k: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
kint | float | QueryBuilder必填选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

quantile()跨每个聚合分组中的序列计算分位数。
QueryBuilder.quantile(q: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
qint | float | QueryBuilder必填请求的分位数,通常在 [0, 1] 内。范围外的值遵循后端分位数语义,构建器不会一律拒绝。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

quantiles()跨序列计算多个 MetricsQL 分位数,并用输出标签区分各分位数。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.quantiles(label: str, *quantiles: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
labelstr必填不含控制字符的非空标签名。方言要求时,构建器会为名称加引号。
*quantilesint | float | QueryBuilder, ...可变参数一个或多个分位数,通常各自在 [0, 1] 内。PromQL histogram_quantiles 最多接受 10 个,MetricsQL 支持自己的可变参数形式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

share()将每个样本除以所在聚合分组的总和。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.share(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

stddev()跨每个聚合分组中的序列计算总体标准差。
QueryBuilder.stddev(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

stdvar()跨每个聚合分组中的序列计算总体方差。
QueryBuilder.stdvar(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

sum()跨每个聚合分组中的序列计算总和。
QueryBuilder.sum(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

sum2()跨每个聚合分组中的序列计算平方和。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.sum2(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

topk()在每个聚合分组中保留样本值最大的 k 条序列,并保留所选序列的标签。
QueryBuilder.topk(k: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
kint | float | QueryBuilder必填选择的序列数量。要得到非空 top/bottom 结果,应使用正整数。允许标量表达式,转换与边界语义由后端决定。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

topk_avg()保留 MetricsQL 查询区间内算术平均值最大的 k 条序列,可选收集其余序列。仅限 MetricsQL
仅限 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
仅限 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
仅限 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
仅限 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
仅限 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")
zscore()跨每个聚合分组中的序列计算z-score。仅限 MetricsQL
仅限 MetricsQL
QueryBuilder.zscore(*others: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*othersQueryBuilder, ...可变参数额外输入表达式。多个聚合输入和 union 类转换仅限 MetricsQL;普通 PromQL 聚合只接收当前表达式。

返回值 QueryBuilder:共享未变化原生子树的新不可变表达式。接收表达式不变,不查询数据。

浏览文档

查找你需要的内容

搜索指南、示例和 Python API。