Skip to content

变更窗口与发布日历(谁可以在何时改表 / 发作业) ​

难度与前置

难度:进阶
前置:有日批主题表与值班表;知道 ADS 对外发布前要验收。
读完能做什么:画出一张可执行的变更/发布日历:常规窗谁可改什么、冻结窗禁什么、紧急通道怎么走、与值班/补数/ADS 如何咬合,并能用数字验收「冻结期违规 = 0」。

适用场景 ​

  • 多主题并行改表、发作业、切 ADS,需要统一「何时能动生产」
  • 大促 / 月末结账 / 财报窗要冻结破坏性变更
  • 紧急修数、热修作业需要可审计的紧急通道,而不是群里口头放行
  • 变更与告警值班、补数演练、对外出数窗口互相踩脚,要写清先后

不适用:

真实场景(一条) ​

短剧投放组在「周末大促」前一晚,有人合入了 dwd_ad_event 主键变更并直接切生产 ADS。大促当晚:

  • 下游 ROI 看板空窗 40 分钟;值班按 告警与值班 止血,才发现变更未走影响评估
  • 补数同学同时在刷历史分区,与新主键逻辑冲突,对账 diff 爆表
  • 事后复盘:没有冻结窗、没有「谁可在何时发」日历,紧急口头改生产无法审计

按本清单重来:大促 D-3~D+1 标为冻结窗(禁破坏性改表/禁切 ADS,仅紧急通道)→ 常规窗仅主题 owner + 值班双签 → 紧急通道必须挂影响面与回滚点 → 观察期 30 天:冻结期违规变更 0,对外空窗从 40min 降到 ≤ 约定 SLA。

怎么做(步骤清单) ​

1. 先定三类窗口(写进日历,不写进聊天) ​

窗口类型何时允许禁止谁批准
常规变更窗工作日固定时段(如 10:00–16:00 上海)改表/发作业/切读(需影响评估+验收)无评估的破坏性变更主题 owner
冻结窗大促、月末结账、财报、已知高流量日只读观察、紧急通道热修常规改表、常规切 ADS、大规模补数数据负责人 + 值班长
紧急通道任意时刻,仅 P0/P1 止血最小热修、回滚、停读切旧「顺便」改口径、扩范围补数值班长 + owner 双签(事后 24h 补单)
text
变更窗口登记卡(最小)
主题 / 对象:库.表 / 作业 / ADS ________
窗口类型:□常规 □冻结期内紧急 □紧急通道
计划时刻(上海):从 ____ 到 ____
变更摘要(一句话):________
影响面单号 / lineage 链接:________
回滚点:________  观察窗:____ 分钟
批准人:owner ____  值班 ____  日期:________

日历建议挂在团队可见处(看板或仓库日历文件均可);冻结日清单按季度预告,临时加冻需群公告 + 日历更新。

2. 变更分级:什么叫「破坏性」 ​

对齐 改表前影响评估,把变更分成可自动进常规窗 vs 必须加码:

级别例子常规窗最低门禁冻结窗
L0 文档/注释README、告警文案主题 owner 自审允许
L1 非破坏加可空列、加监控、加下游只读任务影响面勾选 + 测试样例原则上推迟;例外走紧急
L2 破坏性改主键/分区/过滤、改指标口径、切 ADS currentlineage 签字 + 对账/样例 PASS + 观察窗禁止(仅紧急通道)
L3 大规模全量回刷、跨主题切流、停旧表另定专窗 + 补数演练 干跑记录禁止

「发作业」与「改表」同一套分级:调度依赖边变更若导致 READY 语义变化,按 L2。

3. 与值班、补数、ADS 的咬合顺序 ​

一口清:先日历,再变更,再出数;补数不抢冻结窗。

text
发布日当天推荐顺序(上海时区)
1) 值班交接:确认今日是否冻结日、在途紧急单
2) 常规窗内合入:L1/L2 按门禁;L2 必须有 lineage-impact 记录
3) ADS 出数:仅验收 PASS 后切流(见 ads-publish);切流动作本身算 L2
4) 观察窗:与 alert-oncall 同频道;量级/对账告警升级为 P0
5) 补数:非冻结日按 rerun-catchup;陌生大窗先 backfill-drill 干跑
6) 冻结日:生产补数默认禁止;例外走紧急通道且范围最小

与事故的关系:冻结期违规或紧急通道未补单,应在 事故复盘 根因桶打「变更未评估 / 门禁被跳过」。

4. 紧急通道:最小可审计流程(不是免责金牌) ​

text
紧急通道清单(可复制)
触发:□P0 错误对外 □P1 大面积空窗 □安全/合规强制
最小变更集(禁止夹带):________
已评估回滚:□切回旧表/旧分区 □停作业 □公告不可信
影响面(表/看板/API):________
双签:值班长 ____  owner ____  时刻 ____
事后 24h:补变更单 + 是否升级永久门禁:是/否

紧急通道允许「先止血后补文档」,不允许「无回滚点就改生产」。

5. 发布日历模板(按月) ​

text
YYYY-MM 数据发布日历(节选)
日期        类型      备注
01–03       月末结账冻  禁 L2/L3;ADS 仅紧急
每周二/四   常规窗    10:00–16:00 上海;L2 需双签
大促 D-3~D+1  活动冻  见活动页;值班加一档
每月第 2 周三 补数演练窗  仅 test/演练账号,见 backfill-drill

把「ADS 对外承诺出数时刻」标在日历上,变更窗避开该时刻前后的观察带(例如出数前 2h、后 1h 不切 L2)。

常见坑(至少这些) ​

  1. 冻结窗只在群里口嗨,日历无记录
    大促当晚仍有人合入切流。

  2. 紧急通道变成日常旁路
    「来不及走常规」每周三次 = 没有常规。

  3. 改表过了、ADS 切流没登记
    切 current 本身是 L2,必须进日历。

  4. 补数与变更窗重叠,主键新旧逻辑混跑
    对账 diff 无法解释。

  5. 无影响评估就进常规窗
    对照 lineage-impact。

  6. 值班不知道今日是冻结日
    告警当常规抖动,延误止血。

  7. 事后不补紧急单,复盘无据
    同因下月再犯。

  8. 把本篇写成 Jira 工作流截图课,窗口规则字段全空

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

项改前(示例)改后(目标)
冻结日清单无 / 口头季度预告;日历可查
冻结期 L2/L3 违规次数≥ 1 / 活动0(紧急通道有双签单)
L2 变更含 lineage + 回滚点<50%100%
紧急通道 24h 补单率未知100%
变更导致对外空窗(观察 30 天)有(如 40min)0 或 ≤ 约定且有公告
补数闯入冻结窗次数≥ 10
text
变更窗口验收记录(可复制)
月份 / 活动:________
冻结日数:____  常规窗时段:________
L2 变更单数:____  含 lineage+回滚:____%
紧急通道单数:____  24h 补单:____%
冻结期违规:____(期望 0)
联动抽检:值班知冻结日 Y/N;ADS 观察带无 L2 Y/N
签字(数据负责人):________  日期:________

Checklist:

  • [ ] 三类窗口定义书面化,冻结日可查
  • [ ] L0–L3 分级与门禁表可执行
  • [ ] 与 alert-oncall / backfill-drill / ads-publish / lineage-impact / incident-postmortem 咬合顺序写清
  • [ ] 紧急通道有双签、回滚点、事后补单
  • [ ] 验收含冻结期违规 = 0 等数字
  • [ ] 无 Jira 教程体;无未公开公司项目名

相关专篇(互链,不重写) ​

你要做的事看哪篇
接警、分级、公告告警与值班
补数干跑与安全窗补数演练、补数/重跑
对外切流前验收ADS 出数验收
改表影响面改表前影响评估
表切换双写切读表切换与灰度切流
违规变更后的复盘事故复盘
本篇只定谁可以在何时改/发,不替代上述专篇

相关面试题 ​

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

  • [ ] 题:大促冻结窗与常规变更窗分别允许/禁止什么?如何用数字验收冻结期零违规?(考察点:三类窗口 + 冻结期违规=0)→ 占位:#todo-interview-change-window-freeze
  • [ ] 题:紧急通道最低要具备哪些字段才算可审计,而不是口头放行?(考察点:双签/回滚点/24h补单)→ 占位:#todo-interview-change-window-emergency
  • [ ] 题:切 ADS current 为何要算进变更分级?与出数观察带如何错开?(考察点:L2 切流 + 日历咬合)→ 占位:#todo-interview-change-window-ads
  • [ ] 题:补数演练窗与生产冻结窗冲突时如何取舍?(考察点:与 backfill-drill 边界)→ 占位:#todo-interview-change-window-backfill