中间表治理
总结
| 记忆点 | 内容 |
|---|---|
| 泛滥根因 | tmp表不清理、旧表不下线、重复建设 |
| 判定标准 | 查询频次 + 下游依赖 + 产出状态 |
| 分级治理 | 核心 → 常规 → 低频 → 废弃 |
| 下线四步 | 标记 → 通知(2周) → 软删除(30天) → 物理删除 |
| 预防措施 | 命名约束 + 审批 + 定期巡检 + 成本归因 |
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
进阶 | 大数据面试 · 数仓建模系列
| 面试真题 你们数仓里有多少张表?有没有做过表的治理和清理?怎么判断一张表还有没有用? |
|---|
中间表泛滥:每个数仓的通病
打开你们的数仓,搜一下tmp_、test_、bak_——是不是有一大堆?这些表的诞生通常是这样的:某天某个需求急,临时建了一张tmp表跑通了然后忘了删;调试SQL建了个test表存中间结果后来也没管;重构的时候旧表rename成xxx_bak,说好一周后删结果半年了还在;不同的人为了同一个需求各建了一张中间表谁也不知道谁的。
| Wood的实战经验 我接手短剧出海公司数据组时,数仓里有600多张表。做完盘点发现:200多张是正经的ODS/DWD/DWS/ADS,剩下400张里有150张tmp/test表、100张是已废弃但没人敢删的旧表、50张是重复建设的。真正有价值的表只占了总数的三分之一。 这不是个例,我经历的4家公司,每一家接手时都有这个问题。中间表泛滥是数仓的「慢性病」,不致命但越拖越严重。 |
|---|
怎么判断一张表还有没有用?
靠猜不行,要靠数据说话。三个维度判定:
维度一:查询频次。最近30天查询次数 > 0 → 活跃表;最近30天无查询但90天内有 → 低频表需确认;最近90天无查询 → 高度疑似废弃表。大部分平台都有审计日志/查询日志,写一个SQL就能查出来。
维度二:下游依赖。这张表有没有被其他调度任务读取?有没有被报表引用?有没有被API接口调用?用数据血缘追踪下游。如果一张表既没人查也没下游依赖,大概率可以下线。
维度三:产出状态。这张表的调度任务还在跑吗?最后一次产出数据是什么时候?任务是否已经暂停或下线?任务已经停了但表还在占存储的情况非常常见。
表资产分级治理
盘点完之后,把所有表分成四类:
| 等级 | 定义 | 处置方案 |
|---|---|---|
| 核心表 | 日常报表/接口依赖,有SLA要求 | 重点维护,有质量监控和告警 |
| 常规表 | 有下游使用,但不是核心链路 | 正常维护,定期Review |
| 低频表 | 偶尔被查,但有保留价值 | 降低调度优先级,考虑冷存储 |
| 废弃表 | 90天无查询、无下游、无产出 | 走下线流程,回收存储 |
废弃表下线流程
直接删太危险,要有流程:
第一步:标记(Deprecated)。给疑似废弃的表打标记,加到表注释里。比如「[DEPRECATED 2025-01-15] 原用户分析临时表,已被dws_user_wide替代。计划2025-02-15下线。」
第二步:通知(至少两周)。在团队群/文档里公告:以下XX张表标记为废弃,计划于XX日下线,如有使用请反馈。实际操作中90%不会有人反馈,但这两周缓冲期非常重要——万一有个季度跑一次的任务正好依赖这张表。
第三步:软删除(移到回收站)。不直接DROP,先改名移到回收站schema保留30天。这期间如果有人发现需要,可以快速恢复。
第四步:物理删除。30天后无人认领,执行DROP释放存储。
预防中间表泛滥
治理是治标,预防才是治本:
① 命名约束:tmp表必须带日期后缀(tmp_user_analysis_20250115),可以配置自动策略:tmp_开头且超过30天的表自动进入下线流程。
② 审批机制:在非tmp命名空间建表需要审批,避免随意建表污染正式库。
③ 定期巡检:每月跑一次表资产盘点脚本,自动输出报告——本月新增表、废弃表候选、存储Top10表、90天零查询表。
④ 成本归因:把存储成本分摊到团队/个人。当你发现自己建的tmp表每月烧了500块,就会主动清理了。
| 面试加分提示 这题体现的是你的数据资产管理意识,属于中高级岗位的加分项: 「我在接手数据组时做过一次全量表盘点。600多张表里有效的只有三分之一,400张是tmp表、废弃表和重复建设。我做了三件事:第一,建立表分级机制,把核心表、常规表、低频表、废弃表区分开;第二,对废弃表走标记→通知→软删除→物理删除的四步流程,两个月下线了150张表,释放了约2TB存储;第三,制定预防措施,tmp表强制带日期后缀且30天自动清理,非tmp建表需要审批。」 关键:有数字(600张/150张/2TB)+ 有流程 + 有预防。 |
|---|