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 參考。