第2章 元数据混乱:一个互联网公司的真实困境

这一章咱们来聊聊真实发生过的事。我接手这个项目的时候,客户的数据平台已经跑了三年多。业务侧天天催数,数据团队天天加班补坑。表面看是数据质量差,往里一挖——元数据乱得没法看。

你是不是也遇到过这种情况?

  • 查一个表名,得问三个人才知道它到底存了什么
  • 业务口径对上个月和这个月居然不一样
  • 跑了半天的ETL,结果发现源头字段已经改了名字

嗯,这就是元数据失控的信号。这一节我会把当时的场景完整复盘,带你看看混乱到底长什么样。

背景:快速扩张下的数据沼泽

这家公司是做电商+社交裂变的,日活千万级。三年里团队从10个人膨胀到200人。数据仓库从一张宽表变成了3000多张表,数据源从MySQL扩展到了Kafka、Hive、HBase、Elasticsearch,中间还有十几套自研的微服务。

业务迭代快,每周都有新需求。开发为了赶进度,直接往Hive里建表,表名随便起,字段类型凭感觉选。数据字典?没人维护。血缘关系?没人理。

我接手时看到的第一份元数据快照是这样的:

表名:tmp_order_20210803_v2
注释:临时表
字段:id bigint, uid string, amount double
实际情况:uid 存的是订单号,amount 存的是折扣后金额,id 重复且无主键

这样的表,整个平台里有四百多张。光看名字,你根本猜不出它是什么。

元数据混乱的典型表现

我花了两周时间,把线上能收集到的元数据梳理了一遍。问题集中在四个维度:

维度典型症状影响范围
表命名无统一规范,tmp_、test_、bak_ 泛滥300+ 无效临时表
字段口径同一字段在不同表里含义不同80% 的报表对不上
血缘关系数据从哪来、经过哪些转换完全黑盒每次排错需要人工追溯
生命周期无过期策略,僵尸表长年不清理占用 40% 的存储资源

我曾经遇到过一个案例:业务方要算“当天支付用户数”。数据产品从三个不同入口取数,结果分别是 12.3 万、8.7 万、15.1 万。谁也说不清哪个是对的。最后查了半个月,发现有的统计去了重,有的没去;有的只算了成功支付,有的算了包括退款的。这就是口径混乱的典型结果。

混乱带来的连锁反应

元数据乱,不只是找数据费劲。它会一层层传导到整个数据体系:

连锁效应链条:

  1. 开发随意建表 → 数据资产膨胀失控
  2. 口径不统一 → 报表打架
  3. 血缘缺失 → 事故追溯耗时
  4. 无权限管控 → 敏感字段泄露风险
  5. 人工核对占比高 → 研发效能打五折

你看看,是不是一个螺旋下降的循环?我印象最深的是有一次线上事故:运营临时要一份用户画像数据,数据团队花了三天写了一个临时ETL脚本。结果脚本里引用的一个Hive表已经被删除了——因为那张表没有元数据标记,系统自动清理了“过期”数据。运营没拿到数据,业务决策延误,直接损失了几十万的营销预算。

根源分析:为什么元数据会失控

很多人以为元数据乱是工具不好用,或者开发懒。我个人习惯先找系统性问题,而不是怪个人。复盘下来,三个根因很典型:

  • 缺乏入口管控:任何人都能通过Hue或Beeline直接建表,没有审批流程,没有命名规范校验。
  • 元数据存储分散:Hive Metastore存了表结构,但业务字典藏在Wiki里,血缘信息埋在代码注释里,数据质量规则散落在各个监控脚本里。
  • 认知断层:数据开发只管写SQL,业务方只管提需求,中间没有一个人对元数据治理负责。

你想想看,这三个问题放到一起,是不是很像一个定时炸弹?

我当时在现场给CTO拉了一张图,把混乱的影响范围画了出来——

元数据混乱的影响全景 元数据失控 入口无管控 任意建表无审批 存储分散 关系全部断裂 认知断层 没人真正负责 存储膨胀 40% 僵尸表+重复表 口径混乱 80% 报表数据对不齐 排障成本高 平均>3天/次事故 业务信任崩塌 数据产品沦为摆设 研发效能腰斩 · 数据资产贬值

一个小提示: 元数据混乱不是一天造成的。我见过很多团队想一上来就上治理平台,结果发现根本没有可用的元数据做基底。先做一次彻底的元数据审计,比任何工具都重要。

该怎么破局?——先认清问题全貌

讲到这里,你可能觉得问题很严重。没错,确实很严重。但好消息是,只要把问题拆开、理清,治理路径就出来了。说白了,元数据治理不是技术难,而是管理难、规范难、持续难。

我之前带过的一个组,在“最乱”的平台上先做了三件小事:

  • 停掉所有无审批建表权限(先止血)
  • 用两天时间把所有临时表打上标签(先看清楚)
  • 定义核心表的字段口径文档(先对齐口径)

就这三步,三个月后数据平台的“找表时间”从平均2小时降到了15分钟。你觉得神奇?其实不是工具厉害,而是把元数据这个“隐性资产”显性化了。

避坑指南: 我曾经见过一个团队,花了大半年做元数据平台,建了漂亮的图谱,结果没人用。为什么?因为业务开发觉得“录入元数据”是额外负担。所以治理这件事,必须和开发流程绑定——比如建表时就强制填写字段说明,否则SQL提交流程驳回。只有这样,元数据才不会变成“事后补录”的摆设。