外观
变更窗口与发布日历(谁可以在何时改表 / 发作业)
难度与前置
难度:进阶
前置:有日批主题表与值班表;知道 ADS 对外发布前要验收。
读完能做什么:画出一张可执行的变更/发布日历:常规窗谁可改什么、冻结窗禁什么、紧急通道怎么走、与值班/补数/ADS 如何咬合,并能用数字验收「冻结期违规 = 0」。
适用场景
- 多主题并行改表、发作业、切 ADS,需要统一「何时能动生产」
- 大促 / 月末结账 / 财报窗要冻结破坏性变更
- 紧急修数、热修作业需要可审计的紧急通道,而不是群里口头放行
- 变更与告警值班、补数演练、对外出数窗口互相踩脚,要写清先后
不适用:
- Jira / 工单系统配置教程(本文只定窗口与日历规则)
- 具体 SQL 改法、切流步骤本身(见 表切换与灰度切流、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 current | lineage 签字 + 对账/样例 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)。
常见坑(至少这些)
冻结窗只在群里口嗨,日历无记录
大促当晚仍有人合入切流。紧急通道变成日常旁路
「来不及走常规」每周三次 = 没有常规。改表过了、ADS 切流没登记
切current本身是 L2,必须进日历。补数与变更窗重叠,主键新旧逻辑混跑
对账 diff 无法解释。无影响评估就进常规窗
对照 lineage-impact。值班不知道今日是冻结日
告警当常规抖动,延误止血。事后不补紧急单,复盘无据
同因下月再犯。把本篇写成 Jira 工作流截图课,窗口规则字段全空
如何验收(带数字的前后对比)
| 项 | 改前(示例) | 改后(目标) |
|---|---|---|
| 冻结日清单 | 无 / 口头 | 季度预告;日历可查 |
| 冻结期 L2/L3 违规次数 | ≥ 1 / 活动 | 0(紧急通道有双签单) |
| L2 变更含 lineage + 回滚点 | <50% | 100% |
| 紧急通道 24h 补单率 | 未知 | 100% |
| 变更导致对外空窗(观察 30 天) | 有(如 40min) | 0 或 ≤ 约定且有公告 |
| 补数闯入冻结窗次数 | ≥ 1 | 0 |
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