活動合約
查詢期望的欄位
| 欄位 | 型別 | 為什麼存在 |
|---|---|---|
| timestamp_utc | Timestamp | 當處理嘗試結束時。 |
| delivery_id | Utf8 | 由重試嘗試共享的穩定識別符號。 |
| provider | Utf8 | Webhook 提供商。 |
| event_type | Utf8 | 提供者事件型別。 |
| attempt | Int64 | 基於一的處理嘗試。 |
| status | Utf8 | 成功、失敗或重複資料刪除。 |
DataFusion SQL
複製查詢
sql
WITH delivery_outcomes AS (
SELECT
delivery_id,
provider,
event_type,
MAX(attempt) AS attempts,
SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failed_attempts,
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) AS successful_attempts,
SUM(CASE WHEN status = 'deduplicated' THEN 1 ELSE 0 END) AS deduplicated_attempts
FROM webhook_deliveries
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY delivery_id, provider, event_type
)
SELECT
provider,
event_type,
COUNT(*) AS deliveries,
SUM(CASE
WHEN failed_attempts > 0 AND successful_attempts > 0 THEN 1 ELSE 0
END) AS recovered,
SUM(CASE
WHEN failed_attempts > 0 AND successful_attempts = 0 THEN 1 ELSE 0
END) AS permanent_failures,
SUM(deduplicated_attempts) AS duplicates_suppressed
FROM delivery_outcomes
GROUP BY provider, event_type
ORDER BY permanent_failures DESC, recovered DESC;此只讀查詢是針對空型別資料表計劃和執行的 阿帕奇 DataFusion 45.2.0。確定性樣本輸出是綜合的並單獨審查;根據您自己的資料驗證欄位型別、閾值和業務定義。 閱讀測試方法。
查詢結果
Webhook 事件導致永久失敗
恢復的事件仍然可見,但不會被視為永久的客戶影響。
invoice.payment_succeeded
1
comparison 1
push
0
comparison 1
| provider | event_type | deliveries | recovered | permanent_failures | duplicates_suppressed |
|---|---|---|---|---|---|
| stripe | invoice.payment_succeeded | 4 | 1 | 1 | 1 |
| github | push | 3 | 1 | 0 | 1 |
綜合範例輸出。在將其用於操作決策之前,針對您自己的事件架構和閾值執行查詢。
SQL 是如何工作的
- 1第一個 CTE 將一次交付的所有嘗試摺疊成一個結果記錄。
- 2恢復的傳遞至少有一次失敗的嘗試和至少一次成功的嘗試。永久的失敗永遠不會成功。
- 3重複抑制是單獨追蹤的,因為正確的冪等性是一個健康的結果,而不是處理失敗。
需要決定的邊緣情況
- 保留提供商交付 ID,以便可以可靠地對重試進行分組。
- 查詢視窗後可能會恢復交付;使用足夠長的視窗來覆蓋提供商的重試時間表。
- 當成功需要的不僅僅是確認提供者時,將接收與下游副作用分開。
推薦儀表板
- 分組條:由 event_type 恢復和 permanent_failures
- Stat:重複抑制率
- 資料表:下游作業上下文的最新永久性故障
讓查詢範例發揮作用
相關埋點和指南
定義源資料
此分析的事件模式
繼續分析
在真實事件中執行它
建立資料表,調整欄位並儲存結果
免費開始,傳送結構化事件,並將查詢結果用作圖表、共享儀表板小工具或警示輸入。