活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 事件发生时间。 |
| event_id | Utf8 | 重试传送时重复使用的稳定标识符。 |
| event_name | Utf8 | 事件合约名称。 |
| source | Utf8 | 生产者名称。 |
DataFusion SQL
复制查询
sql
SELECT
event_id,
event_name,
source,
COUNT(*) AS deliveries,
MIN(timestamp_utc) AS first_seen_at,
MAX(timestamp_utc) AS last_seen_at
FROM telemetry_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
AND event_id IS NOT NULL
GROUP BY event_id, event_name, source
HAVING COUNT(*) > 1
ORDER BY deliveries DESC, last_seen_at DESC
LIMIT 100;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
按事件 ID 重复投递
发票事件已交付四次,需要下游幂等计数。
evt_8f31
4
evt_77ac
2
| event_id | event_name | source | deliveries | first_seen_at | last_seen_at |
|---|---|---|---|---|---|
| evt_8f31 | invoice_paid | stripe_webhook | 4 | 12:01:03 | 12:06:44 |
| evt_77ac | job_completed | billing_worker | 2 | 10:14:22 | 10:14:39 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1按 event_id 分组公开重试传递,而不假设及时关闭的事件是重复的。
- 2包括 event_name 和源代码可以捕获意外地在不同合约中重复使用标识符的生产者。
- 3第一个和最后一个时间戳显示重复项是在短重试突发中还是更晚到达。
需要决定的边缘情况
- 如果下游消费者需要幂等性,则不要为每次重试生成新的事件 ID。
- 在不相关的事件中重复使用标识符是一种检测缺陷,而不是无害的重复。
- 如果在存储之前删除重复项,则发出单独的重复数据删除结果,以便重试行为仍然可观察。
推荐仪表板
- 统计:所选时间段内重复的事件 ID
- 酒吧:按来源重复交付
- 表:最新重复标识符
让查询示例发挥作用
相关埋点和指南
定义源数据
此分析的事件模式
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。