SQL イベント データの時間バケット化
時間バケット化により、個々のイベントがトレンドに変わります。重要な選択は、時間と日だけではありません。一貫したタイムスタンプ、タイムゾーン、間隔の境界、完全性ルール、欠落しているバケットの処理も必要です。 1 時間全体と現在の時間の最初の 3 分間を比較すると、グラフが信頼できるように見えます。
安定した UTC シリーズを構築する
SELECT
date_trunc('hour', timestamp_utc) AS hour,
COUNT(*) AS requests,
100.0 * SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS error_rate_pct
FROM api_request_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY date_trunc('hour', timestamp_utc)
ORDER BY hour;
サーバー管理のものを使用する timestamp_utc クエリ境界のフィールド。モバイル クライアントがオフライン アクションを開始したときなど、別のビジネスの瞬間を表すソース タイムスタンプを別のフィールドとして保持します。ダッシュボードが動作している場合、UTC は夏時間のギャップや現地時間の繰り返しを回避します。
date_trunc は、カレンダーに合わせた時間と曜日の最も簡単な選択です。 date_bin 5 分などの固定間隔の場合に便利です。
date_bin(INTERVAL '5 minutes', timestamp_utc, TIMESTAMP '1970-01-01')
整列する必要があるすべてのクエリで同じオリジンを使用します。
不完全なバケットと空のバケットを処理する
通常、最新のバケットは不完全です。比較から除外するか、明確にラベルを付けます。アラートの場合は、最後に完了した間隔を判断する前に取り込み遅延を考慮してください。
集計では、行を含むバケットのみが返されます。欠落しているポイントは、アクティビティがゼロであるか、取り込みが遅延しているか、クエリのギャップを意味している可能性があります。それらの解釈は互換性がありません。ビジュアライゼーションでギャップをゼロで埋める場合は、その変換を明示的に行い、ゼロが意味的に正しいことを確認します。
安定した量を生み出すのに十分な大きさでありながら、応答をサポートするのに十分な小さいバケットを選択してください。 5 分間のバケットではインシデントが明らかになる可能性があります。多くの場合、毎日のバケットのほうが保持に優れています。参照 タイムスタンプの操作、 インシデント対応ガイド、そして ローリングエラー率のレシピ 完全な例については、