跳转到内容
Telemetry
浏览文档
概念与 SQL 模式更新于 2026年7月28日由 Telemetry 编辑团队和产品团队审核阅读约需 2 分钟

让编程智能体使用这篇文档

打开 Claude Code、Codex、Cursor 或其他编码代理的集中提示包,然后将其适应此处介绍的工作流程。

本页内容
  1. 计算结果并保护分母
  2. 慎重选择人群
  3. 费率需要运营背景

SQL 条件聚合

条件聚合在一个分组查询中回答了几个相关问题。无需扫描表一次以获取成功的请求,然后再次扫描表以获取失败的请求,而是将条件放入 CASE 表达式中,并将两个结果聚合在一起。此模式对于错误率、转换率、重试率、缓存命中率以及分母必须保持可见的任何结果非常有用。

计算结果并保护分母

SELECT
  route_template,
  COUNT(*) AS requests,
  SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS server_errors,
  100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
    / NULLIF(COUNT(*), 0) AS server_error_rate_pct
FROM api_request_events
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template
HAVING COUNT(*) >= 20
ORDER BY server_error_rate_pct DESC;

总数、条件计数和百分比讲述了故事的不同部分。总数确定了样本量。计数显示绝对影响。该费率使不同交通量的路线具有可比性。 NULLIF 保护比率免受零分母影响,而 100.0 将结果保留为百分比算术。

慎重选择人群

WHERE 子句定义分组前的总体。 CASE 表达式定义该群体中的哪些行与结果匹配。这种区别很重要:排除 WHERE 中的故障可以降低错误率,而在分母中包含健康检查可以使客户流量看起来比实际情况更健康。

当每一行都应位于一个状态桶中时,请使用互斥条件。当一行可以合法地满足多个标签时,请使用独立条件。始终检查桶的总和是否等于总数。

费率需要运营背景

两个事件的高百分比很少相当于 200 万个事件的相同百分比。将计数保留在结果中,使用经过审查的最小交易量规则,并比较完整的时间窗口。空状态值、重试、重复传递和延迟事件也需要明确的处理。

从测试的 API 错误率配方事务回滚配方转化率指南 开始。有关其他支持的语法,请参阅 DataFusion SQL 参考

相关产品功能

对结构化事件表运行只读 DataFusion SQL 并重用结果。

内容责任与技术参考

Telemetry 编辑团队负责维护本文;产品团队审核功能行为、示例和适用范围。

查看编辑规范