Skip to content

对账失败分诊(延迟 / 口径 / 丢数 / 重复 / 时区 / 权限采样) ​

难度与前置

难度:进阶
前置:已有源 vs 仓或层间对账任务,差异超阈会告警;能查分区行数与任务实例。
读完能做什么:对账失败后 30 分钟内完成分流(延迟 / 口径 / 丢数 / 重复 / 时区 / 权限采样),给出可执行的下一步,而不是重复跑同一条对账 SQL。

适用场景 ​

  • 源 vs 仓、ODS vs DWD、DWS vs ADS 对账 diff 超阈告警刚响
  • 业务反馈「看板和渠道后台对不上」,需要先分诊再深挖
  • 多人同时改口径、补数、切流,差异原因混杂,需要统一决策树
  • 值班要在首响窗口给出「是否对外不可信」的判断

不适用:

真实场景(一条) ​

短剧投放组 ads_ad_spend_1d 与渠道后台消耗对账,某日 diff +18%。群里三人同时猜:补数延迟、赠款口径、重复点击、时区、权限采样。

首 30 分钟按本分诊:

  1. 新鲜度:渠道 API 该分区仍在写入,仓侧已封板 → 先标「延迟」,不对业务宣布「数错了」
  2. 等待源侧封闭后再对:行数对齐,金额仍高 3% → 排除纯延迟
  3. 抽主键:无重复;按活动时区切日 vs UTC 存证对比 → 发现美区活动用上海日切,跨日边界错归 → 时区
  4. 修正业务日切规则后 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 ____→____  时刻:________

常见坑(至少这些) ​

  1. 一失败就改口径 SQL「对齐后台」
    把延迟和时区洗成永久错账。

  2. 不对新鲜度,源还在写就宣布仓错

  3. 用带行级权限的分析师账号对全量
    权限采样被当成丢数。

  4. 忽略时区,跨市场活动日切错位

  5. 只看金额不看行数,漏掉翻倍

  6. 并行改五处,无唯一下一步

  7. 分诊结论不写原因码,下周同样告警重来

  8. 把本篇写成对账公式课,决策树字段全空

如何验收(带数字的前后对比) ​

项改前(示例)改后(目标)
告警后完成分流记录无 / 口头猜≤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