SQL 条件付き集計
条件付き集計は、1 つのグループ化されたクエリで複数の関連する質問に答えます。 成功リクエストと失敗リクエストでテーブルを別々に走査する代わりに、条件を 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 エラー率は不可能になり、分母にヘルスチェックを含めると、顧客トラフィックが実際よりも健全に見える可能性があります。
すべての行が 1 つのステータス バケットに入る必要がある場合は、相互に排他的な条件を使用します。行が複数のラベルを正当に満たすことができる場合は、独立条件を使用します。バケットの合計が合計と等しいと予想されるかどうかを常に確認してください。
料金には運用上のコンテキストが必要です
2 つのイベントからの高いパーセンテージが、200 万のイベントからの同じパーセンテージと同等になることはほとんどありません。結果内のカウントを保持し、レビューされた最小ボリューム ルールを使用して、完全な時間枠を比較します。 Null ステータス値、再試行、重複配信、遅延イベントも明示的な処理が必要です。
テスト済みのものから始める API エラー率レシピ, トランザクションのロールバックレシピ、または 換算率ガイド。サポートされているその他の構文については、 DataFusion SQL リファレンス.