Skip to content

埋点与口径变更怎么落地 ​

难度与前置

难度:进阶
前置:知道埋点事件与指标字典;理解「同名异义」的危害。
读完能做什么:走完一次埋点或口径变更:登记 → 兼容 → 验证 → 下游门禁发布 → 决定是否回刷。

适用场景 ​

  • 客户端改版要改事件名 / 参数,或新增必填字段
  • 业务重定义指标(如消耗是否含赠款),报表与 API 要切新口径
  • 历史有多套同义事件,要合并并灰度切换

不适用:

  • 日常「同名指标对不齐」的稳态治理(见 指标口径一致性)
  • 仅 Kafka 消息 schema 兼容细节(见 Schema 演进;本文管变更流程)
  • 从 1000 事件精简到 100 的盘点专项(可作前置项目,本文聚焦单次变更怎么上线)

真实场景(一条) ​

投放 App 改版:buy_click 改为 purchase_click,并新增必填 campaign_id。客户端先发版,数仓未改映射,ADS「消耗」一周内少计约 12%(旧事件仍进、新事件落未知桶)。业务先发现,数据侧被动补数。

改造流程:

  1. 变更单进埋点字典:旧事件废弃日、新事件生效日、双写窗口
  2. ODS 映射表双读,DWD 统一成标准事件名
  3. 验证:新包抽样触发 + 字段缺失率告警
  4. ADS 走 出数验收 门禁后切 current
  5. 窗口期内旧事件占比 < 阈值再下线旧映射

结果:切流当周无「静默少计」;缺失率从双位数降到约定阈值内。

怎么做(步骤清单) ​

1. 先判变更类型,再选策略 ​

类型例子策略要点
A. 埋点事件/参数变更改名、增必填、枚举扩展字典 + 双写/兼容窗口 + 客户端验证
B. 指标口径变更含税/赠款、归因窗口新指标名或新 version;禁止静默改旧 SQL
C. 两者同时改版带动口径拆成两张变更单,埋点就绪后再切口径

口诀:能加新名就不要偷改旧名的含义(尤其是已被报表引用的指标)。

2. 变更单最小字段(埋点字典 / 指标字典) ​

text
change_id / owner / 生效版本(App 或仓版本)
对象:event_name 或 metric_id
变更前定义 / 变更后定义(含 SQL 或字段列表)
兼容策略:双写至 YYYY-MM-DD / 只增字段可空→必填日期
影响下游:表、ADS、API、看板(血缘列表)
是否回刷历史:是/否 + 分区范围
验收标准:缺失率、diff 阈值、抽检清单

无变更单禁止合入生产映射与 ADS 发布。

3. 埋点侧:兼容窗口 + 上线前验证 ​

  1. 命名:对象_动作(或团队已有规范),禁止 click1
  2. 公共参数:user / device / app_version / event_ts 由 SDK 统一带
  3. 双写或双读:
    • 客户端短期双发旧+新;或
    • 仓侧映射 COALESCE(new, old),窗口结束后只认新
  4. 上线前验证(不可省):触发时机、必填参数、枚举值;用验证平台或抓包
  5. 改版回归:发版检查单含埋点项,防止「界面改了事件没了」

字段新增建议:先可选 → 观察缺失率 → 再改必填并告警。

消息层兼容与淘汰策略与 Schema 演进 对齐,避免仓与 Topic 各改各的。

4. 口径侧:新版本,不静默改历史含义 ​

text
metric_spend_v1  含赠款
metric_spend_v2  不含赠款   ← 新名或 version
ads_xxx_current → 灰度切到 v2 计算的物理表
  • 原子指标唯一 SQL;派生/复合在字典里写清限定条件
  • 看板文案同步改显示名(如「消耗(不含赠款)」)
  • 与财务/运营对齐会议纪要挂在变更单上

稳态「多报表对不齐」仍用 口径一致性 的对账手段。

5. 下游联动(算 → 验 → 发) ​

text
映射/DWD 切换
  → DWS/ADS 重跑变更影响的 dt(若需要)
  → 对账 + 新鲜度门禁
  → ADS/API 按 [出数验收](/warehouse/ads-publish) 灰度切 current

需要历史对齐时,回刷范围与并发走 补数与重跑,本篇不展开操作手册。不回刷则文档写明:历史分区仍为旧口径,分析勿跨版本拼接。

仓侧改表 / 改字段 / 改口径前的影响评估见 改表前影响评估。

6. 观察与收尾 ​

窗口期内盯:

信号动作
新事件量 ≈ 旧事件量(切流日)正常
新事件暴跌、旧事件仍高发版覆盖率或映射错误
必填字段缺失率超阈值阻断切 current / 催客户端
ADS vs 对账 diff 超阈值不发布,回滚 current

窗口结束:下线旧事件映射、归档变更单、更新字典状态为 deprecated。

常见坑(至少这些) ​

  1. 先发客户端、后改仓
    静默丢数窗口以「业务发现」收场。

  2. 偷改旧指标 SQL 的含义
    历史趋势断裂且无人知;应新 version。

  3. 无验证就上线
    漏参、错时机,脏数据进一周才暴露。

  4. 只改 ADS、不改埋点/DWD
    出口好看,源头仍双轨。

  5. 兼容窗口无限期
    旧事件永远不删,字典再次膨胀。

  6. 回刷与当日任务抢资源且无门禁
    补数打满集群;发布未经验收。

  7. Kafka schema 与埋点字典不同步
    一端加字段一端未知,见 Schema 演进篇。

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

指标改前(示例)改后(目标)
变更导致的静默少计/错计天数如 ≥ 3 天0(验证+门禁挡住)
新事件必填字段缺失率如 > 10%≤ 约定(如 2%)
切流日新旧事件量相对差≤ 约定(如 5%,排除自然波动)
ADS 发布前对账 diff未跑或 > 1%≤ 阈值且门禁通过
旧事件下线是否按期遥遥无期变更单写死日期并执行

Checklist:

  • [ ] 变更单字段齐全,血缘下游已列
  • [ ] 埋点上线前验证记录存在
  • [ ] 口径变更使用新 version/新名,无静默改义
  • [ ] ADS/API 经出数门禁再切 current
  • [ ] 是否回刷有书面结论;回刷走补数专篇流程
  • [ ] 兼容窗口有结束日与下线动作
text
验收记录模板:
change_id:
类型:埋点 / 口径 / 两者
兼容窗口:
验证结论:
门禁 / 灰度:
是否回刷及范围:
旧事件/旧 version 下线日:
签字(数据+产品):

相关面试题 ​

题库小程序链接待定;先用站内锚点占位。

  • [ ] 题:口径变更为什么禁止静默改同名字段含义?(考察点:新 version/新名)→ 占位:#todo-interview-tracking-metric-no-silent
  • [ ] 题:埋点上线前验证记录缺了为什么不能切流?(考察点:上线前验证记录存在)→ 占位:#todo-interview-tracking-metric-precheck
  • [ ] 题:ADS 切 current 前要对齐哪类门禁?(考察点:出数门禁后再切;对账 diff≤阈值)→ 占位:#todo-interview-tracking-metric-ads-gate
  • [ ] 题:兼容窗口结束要做什么?(考察点:写死旧事件/旧 version 下线日并执行)→ 占位:#todo-interview-tracking-metric-compat-end

改写说明:综合 Wood 埋点治理/设计与指标口径管理,改写成「单次变更可照着做」的流程文;与口径一致性、ADS 发布、Schema 演进、补数专篇分工明确。无未公开公司数据。