活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| 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 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1CASE 表达式计算来自同一交付群体的重复和失败计数。
- 2重复率是一个传递特性;它并不能证明重复的业务效果。
- 3尾部延迟显示处理程序是否接近提供程序超时或重试边界。
需要决定的边缘情况
- 重复项可以成功地进行重复数据删除,并且不应自动算作失败。
- 提供程序重试策略和事件量不同,因此请保留提供程序和事件类型。
- 切勿在此表中存储 Webhook 签名或原始付款负载。
推荐仪表板
- 堆叠条:按事件类型划分的重复和失败
- 趋势:p95 webhook 延迟
- 表:最近失败的下游作业
让查询示例发挥作用
相关埋点和指南
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。