外观
对账失败分诊(延迟 / 口径 / 丢数 / 重复 / 时区 / 权限采样)
难度与前置
难度:进阶
前置:已有源 vs 仓或层间对账任务,差异超阈会告警;能查分区行数与任务实例。
读完能做什么:对账失败后 30 分钟内完成分流(延迟 / 口径 / 丢数 / 重复 / 时区 / 权限采样),给出可执行的下一步,而不是重复跑同一条对账 SQL。
适用场景
- 源 vs 仓、ODS vs DWD、DWS vs ADS 对账 diff 超阈告警刚响
- 业务反馈「看板和渠道后台对不上」,需要先分诊再深挖
- 多人同时改口径、补数、切流,差异原因混杂,需要统一决策树
- 值班要在首响窗口给出「是否对外不可信」的判断
不适用:
真实场景(一条)
短剧投放组 ads_ad_spend_1d 与渠道后台消耗对账,某日 diff +18%。群里三人同时猜:补数延迟、赠款口径、重复点击、时区、权限采样。
首 30 分钟按本分诊:
- 新鲜度:渠道 API 该分区仍在写入,仓侧已封板 → 先标「延迟」,不对业务宣布「数错了」
- 等待源侧封闭后再对:行数对齐,金额仍高 3% → 排除纯延迟
- 抽主键:无重复;按活动时区切日 vs UTC 存证对比 → 发现美区活动用上海日切,跨日边界错归 → 时区
- 修正业务日切规则后 diff 入阈;观察 7 天同类误报从每周 3 次降到 0
若一上来改口径 SQL「抹平」18%,会把延迟与时区问题洗成静默错数。
怎么做(步骤清单)
1. 决策树:先分流,再深挖
text
对账失败分诊树(从上到下,命中即停深挖该枝)
① 延迟? 源未封闭 / 仓未跑完 / 新鲜度未达标
→ 标「等待」;约定重对时刻;不改口径
② 权限/采样? 对账账号过滤、抽样比、脱敏视图裁剪
→ 换全量只读角色或声明采样误差;禁止当丢数
③ 时区/日切? 事件时区 vs 业务日 vs 存储 UTC 不一致
→ 见 multi-timezone-report;对齐后再比金额
④ 重复? 主键/幂等键翻倍、补数追加
→ 行数/字节量对照 volume-monitor;修写入幂等
⑤ 丢数? 过滤过严、分区漏跑、上游空窗
→ 按链路段行数递减定位;补数走 rerun 规范
⑥ 口径? 赠款/退款/汇率/未知桶/Join 膨胀
→ 原因码 + metric-consistency;改口径走变更窗口诀:能用延迟/权限/时区解释的,绝不先改业务口径。
2. 首 30 分钟清单(可复制)
text
对账失败 · 首 30 分钟
T+0 告警对象:________ 分区/窗口:________ diff:____(绝对值/%)
T+5 新鲜度:源封闭?Y/N 仓任务终态?____ SLA:见 freshness-sla
T+10 量级:行数 vs 昨日/基线 ____;字节量异常?Y/N(volume-monitor)
T+15 分流初判:□延迟 □权限采样 □时区 □重复 □丢数 □口径 □复合
T+20 是否对外不可信:□是(公告)□否(等待重对)□观察中
T+25 下一步唯一动作(只写一条):________
T+30 重对预约时刻 / 升级单号:________复合原因允许,但下一步只许一条主动作,防止并行乱改。
3. 各枝最小取证(表格)
| 分流 | 最小证据 | 常见动作 | 链到 |
|---|---|---|---|
| 延迟 | 源最大事件时间、仓 max(dt) 写入时刻 | 等封闭;改对账触发依赖 | 新鲜度 SLA |
| 权限采样 | 对账 SQL 是否 LIMIT/哈希桶/行级权限 | 换角色全量对;记录采样误差带 | 质量闭环 |
| 时区 | 同一 event_id 在 UTC 日与业务日归属 | 统一日切规则后再比 | 多时区报表 |
| 重复 | 唯一键 count vs count distinct;补数次数 | 覆盖写/去重;禁追加补数 | 量级监控 |
| 丢数 | 链路各层行数漏斗;空分区 | 补跑缺失分区;查过滤 | 对账设计 |
| 口径 | 原因码分布;赠款/退款开关 | 口径变更单;禁私自改 SQL 抹平 | 指标口径 |
4. 与闭环、复盘的分工
text
分诊结论卡(可贴问题单)
diff:____ → 主因码:延迟/权限/时区/重复/丢数/口径
证据链接:________
是否阻断下游/ADS:是/否
重对结果:diff ____→____ 时刻:________常见坑(至少这些)
一失败就改口径 SQL「对齐后台」
把延迟和时区洗成永久错账。不对新鲜度,源还在写就宣布仓错
用带行级权限的分析师账号对全量
权限采样被当成丢数。忽略时区,跨市场活动日切错位
只看金额不看行数,漏掉翻倍
并行改五处,无唯一下一步
分诊结论不写原因码,下周同样告警重来
把本篇写成对账公式课,决策树字段全空
如何验收(带数字的前后对比)
| 项 | 改前(示例) | 改后(目标) |
|---|---|---|
| 告警后完成分流记录 | 无 / 口头猜 | ≤30min 有分诊卡 |
| 误判「口径」实为延迟/时区 | 常见 | 观察期此类误判 0 |
| 对外错误公告准确率 | 延迟当错数 | 仅确认非延迟后公告 |
| 同分区重复告警无原因码 | ≥ 1 次/周 | 0(原因码必填) |
| 重对后 diff 入阈或有解释 | 未知 | 100% 关单有数字 |
text
对账分诊验收记录(可复制)
对象:________ 分区:________ 初始 diff:________
分流:________ 完成时刻(上海):________(距告警 ____ min)
证据:新鲜度 ____;行数 ____;时区检查 Y/N;唯一键 Y/N
下一步唯一动作:________
重对 diff:________ 关单原因码:________
签字(值班/owner):________ 日期:________Checklist:
- [ ] 决策树六枝齐,顺序固定
- [ ] 首 30 分钟清单可执行
- [ ] 链到 reconciliation / volume-monitor / freshness-sla / closed-loop / metric-consistency / multi-timezone-report
- [ ] 验收含分诊时效与误判率数字
- [ ] 无假外链;无未公开公司指标
相关专篇(互链,不重写)
| 你要做的事 | 看哪篇 |
|---|---|
| 对账粒度/容差/原因码设计 | 对账设计 |
| 行数翻倍与空分区 | 行数/字节量监控 |
| 源未封闭与 SLA | 新鲜度 SLA |
| 问题单认领复验 | 质量闭环 |
| 口径立项与变更 | 指标口径一致性 |
| 多时区日切 | 多时区报表口径 |
| 已对外的事故写法 | 事故复盘 |
| 本篇 | 只做失败后分流与首 30 分钟,不替代上述专篇 |
相关面试题
题库小程序链接待定;先用站内锚点占位。
- [ ] 题:对账 diff 超阈后,为何必须先排除延迟与权限采样,再动口径?(考察点:决策树顺序 + 误判=0)→ 占位:
#todo-interview-recon-triage-order - [ ] 题:首 30 分钟清单最少要留下哪些字段才能交班?(考察点:分诊卡完整性)→ 占位:
#todo-interview-recon-triage-30min - [ ] 题:行数正常但金额差 3%,时区枝与口径枝如何用同一
event_id取证?(考察点:时区 vs 口径分流)→ 占位:#todo-interview-recon-triage-tz - [ ] 题:何种分诊结论应阻断 ADS 发布,何种只需预约重对?(考察点:对外不可信判断)→ 占位:
#todo-interview-recon-triage-block