イベント契約
クエリが期待するフィールド
| フィールド | 種類 | なぜ存在するのか |
|---|---|---|
| timestamp_utc | Timestamp | 処理完了時間。 |
| provider | Utf8 | Webhook プロバイダー。 |
| event_type | Utf8 | プロバイダーのイベント カテゴリ。 |
| idempotency_outcome | Utf8 | new_event または重複。 |
| status | Utf8 | 成功か失敗か。 |
| latency_ms | Float64 | 処理期間。 |
DataFusion SQL
クエリをコピーする
sql
SELECT
provider,
event_type,
COUNT(*) AS deliveries,
SUM(CASE WHEN idempotency_outcome = 'duplicate' THEN 1 ELSE 0 END) AS duplicates,
SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failures,
100.0 * SUM(CASE WHEN idempotency_outcome = 'duplicate' THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS duplicate_rate_pct,
approx_percentile_cont(latency_ms, 0.95) AS p95_latency_ms
FROM webhook_deliveries
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY provider, event_type
ORDER BY duplicate_rate_pct DESC, failures DESC;この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。
クエリ結果
Webhook 配信の重複と失敗
Stripe 支払いの失敗では、重複率が最も高く、端末の失敗が多くなります。
invoice.payment_failed
34
9
push
42
3
| provider | event_type | deliveries | duplicates | failures | duplicate_rate_pct | p95_latency_ms |
|---|---|---|---|---|---|---|
| stripe | invoice.payment_failed | 480 | 34 | 9 | 7.08 | 1,180 |
| github | push | 2,940 | 42 | 3 | 1.43 | 420 |
合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。
例を再現する
パブリックフィクスチャをダウンロードする
JSON バンドルには、型付きイベント コントラクトが含まれています。 illustrative 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。
SQL の仕組み
- 1CASE 式は、同じ配信母集団から重複数と失敗数を計算します。
- 2重複率は配信特性です。重複したビジネス効果を証明するものではありません。
- 3テール遅延は、ハンドラーがプロバイダーのタイムアウトまたは再試行の境界に近づいているかどうかを示します。
決定すべきエッジケース
- 重複は正常に重複排除される可能性があり、自動的に失敗としてカウントされることはありません。
- プロバイダーの再試行ポリシーとイベントの量は異なるため、プロバイダーとイベントの種類を保持します。
- Webhook 署名や生の支払いペイロードをこのテーブルに保存しないでください。
推奨されるダッシュボード
- 積み上げバー: イベント タイプ別の重複と失敗
- トレンド: p95 Webhook レイテンシ
- 表: 最近失敗したダウンストリーム ジョブ
レシピを活用する
関連する機器とガイド
分析を続ける
実際のイベントで実行する
テーブルを作成し、フィールドを調整して、結果を保存します
無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。