参考手册

创建表达式

从指标、标签、标量、字符串和函数调用开始构建。

表达式从工厂方法开始。导入 QueryBuilder as Q;传给 function() 的 Python 字符串始终是字面量,不会被解析为查询。构建返回文本,不执行 I/O。

from metricraft import QueryBuilder as Q

base = Q.from_metric("http_requests_total").where_eq("job", "api")
query = base.rate("5m").sum().by("job")
print(query.build(mode="promql"))

默认方言为 MetricsQL,面向 Prometheus 时请显式选择 PromQL。类型检查可能发生在构建表达式时;方言和输出预算还会在最终构建时检查完整表达式。TypeError 表示 Python 输入不兼容,ValueError 表示原生构建或输出约束不满足。

方法与参数

QueryBuilder

QueryBuilder()创建无状态工厂。建议使用类级 from_* 工厂方法开始一个表达式。
QueryBuilder(*args: object, **kwargs: object) -> None
参数
参数 / 类型含义与可接受的值
*args不接受可变参数不接受位置或关键字配置。请使用 Q.from_metric(...) 和 build(mode=...)。
**kwargs不接受可变参数不接受位置或关键字配置。请使用 Q.from_metric(...) 和 build(mode=...)。

返回值 QueryBuilder:无状态工厂;构建前先创建 from_* 表达式。

build()按所选方言验证整个表达式并渲染查询文本,不发送请求或计算数据。
QueryBuilder.build(mode: BuildMode=QueryMode.METRICSQL, *, max_output_bytes: Optional[int]=None, max_expanded_nodes: Optional[int]=None, experimental_functions: bool=False, features: Iterable[str]=()) -> str
参数
参数 / 类型含义与可接受的值
modeQueryMode | str默认值: QueryMode.METRICSQL'promql' 或默认的 'metricsql'。检查完整表达式,包括方言专属参数形式。
max_output_bytesint | None默认值: None正整数字节预算。None 使用原生默认值 1 MiB,拒绝 bool 和零。按 UTF-8 字节而不是字符数计量。
max_expanded_nodesint | None默认值: None正整数表达式出现次数预算。None 使用 100,000;即使底层存储共享,每次渲染重复引用都计数。
experimental_functionsbool默认值: False启用 Prometheus 实验函数。后端也必须启用对应功能,此开关不配置服务器。
featuresIterable[str]默认值: ()显式功能名:'promql-experimental-functions'、'promql-duration-expr'、'promql-extended-range-selectors'、'promql-binop-fill-modifiers'。各项都需要对应服务器支持。请传集合,不要传单个字符串。

返回值 str:已验证的查询文本,可保存或用于客户端请求。

示例

from metricraft import QueryBuilder as Q

Q.from_metric("up").build(mode="promql", max_output_bytes=4096)
from_duration()创建有类型的标量时长,渲染为秒。MetricsQL 中相对步长的单位仍是查询时表达式。
类方法
QueryBuilder.from_duration(value: str) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
valuestr必填时长字面量,如 '5m'。MetricsQL 支持小数和相对区间单位(如 '1.5i'),构建时检查方言。

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

示例

from metricraft import QueryBuilder as Q

Q.from_duration("5m").build(mode="metricsql")
from_labels()从等值匹配器创建无指标名选择器。PromQL 中至少一个匹配器必须排除空标签值。
类方法
QueryBuilder.from_labels(**labels: str) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
**labelsstr, 按关键字传入可变参数标签名和字符串值组成的关键字对,如 job='api'。名称不是 Python 标识符时使用 **mapping。

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

示例

from metricraft import QueryBuilder as Q

Q.from_labels(job="api").build(mode="promql")
from_metric()为指标创建即时向量选择器。名称作为数据编码,必要时加引号。
类方法
QueryBuilder.from_metric(name: str) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
namestr必填非空指标、函数或绑定名称,由对应构造函数验证,不作为原始查询语法插入。

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

示例

from metricraft import QueryBuilder as Q

Q.from_metric("http_requests_total").where_eq("job", "api").build(mode="promql")
from_numeric_literal()解析并规范化数字表示,包括 MetricsQL 的 SI 和二进制后缀;拒绝任意查询文本。
类方法
QueryBuilder.from_numeric_literal(value: str) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
valuestr必填数字表示,如 '1.25'、'2K' 或 '4Mi'。支持 K/M/G/T 与 Ki/Mi/Gi/Ti 后缀,区分大小写;移除下划线。值规范化为普通标量,可用于两种方言。拒绝多余查询词法元素及后缀溢出。

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

示例

from metricraft import QueryBuilder as Q

Q.from_numeric_literal("2K").build(mode="promql")
from_scalar()创建标量数字字面量。即使 bool 继承 int,也会拒绝 Python 布尔值。
类方法
QueryBuilder.from_scalar(value: Number) -> QueryBuilder

原生标量使用 f64,超出 IEEE-754 精确整数范围的 Python 整数可能被舍入。

参数
参数 / 类型含义与可接受的值
valueint | float必填数字字面量,包括 IEEE NaN 和无穷。拒绝 bool,值使用原生浮点表示。

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

示例

from metricraft import QueryBuilder as Q

Q.from_scalar(42).build(mode="promql")
from_string()创建经过转义的字符串字面量,用于函数参数;不会把字符串解析为查询。
类方法
QueryBuilder.from_string(value: str) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
valuestr必填字符串字面量内容。引号、反斜杠和控制字符会被转义,绝不解析任意查询文本。

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

from_tuple()创建非空 MetricsQL 元组,其中表达式必须全为标量或全为字符串。
类方法
QueryBuilder.from_tuple(*values: QueryInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
*valuesint | float | str | QueryBuilder, ...可变参数非空元组,成员必须全为标量或全为字符串。比较元组必须具有合适的数字类型。

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

function()使用有类型的参数调用 Rust 签名目录中的函数,拒绝未知函数和不兼容参数类型。
类方法
QueryBuilder.function(name: str, *args: QueryInput) -> QueryBuilder

字符串是字面量。表达式请用 Q.from_metric('up');function('rate', 'up[5m]') 不会把参数解析为查询。

参数
参数 / 类型含义与可接受的值
namestr必填非空指标、函数或绑定名称,由对应构造函数验证,不作为原始查询语法插入。
*argsQueryBuilder | int | float | str, ...可变参数按上游顺序提供有类型的函数参数。字符串变成字面量,数字、向量、范围类型及参数个数由 Rust 检查。

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

示例

from metricraft import QueryBuilder as Q

Q.function("rate", Q.from_metric("requests_total").range("5m")).build(mode="promql")
vector()将一个标量表达式转换为标签集为空的即时向量。
QueryBuilder.vector(value: ScalarInput) -> QueryBuilder
参数
参数 / 类型含义与可接受的值
valueint | float | QueryBuilder必填数字标量或标量表达式;拒绝 Python bool。计算值由后端求值。

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

浏览文档

查找你需要的内容

搜索指南、示例和 Python API。