数据越多越乱?真正让大数据平台失控的,可能不是数据,而是“没人知道数据是什么”

简介: 数据越多越乱?真正让大数据平台失控的,可能不是数据,而是“没人知道数据是什么”

数据越多越乱?真正让大数据平台失控的,可能不是数据,而是“没人知道数据是什么”

作者:Echo_Wish

很多公司做数据平台,都经历过一个非常相似的阶段:

刚开始,数据不多。

一个 MySQL、几个业务库,外加几个 Excel 文件,大家还能勉强记得:

“订单表在这里,用户表在那里,销售额去这个库查。”

后来业务起来了。

Kafka、Flink、Spark、Hive、ClickHouse、Doris、Elasticsearch、对象存储……一个个都接进来了。

数据湖建了,数据仓库建了,数据中台也建了。

最后出现一个非常尴尬的场景:

数据越来越多,但真正敢用数据的人反而越来越少。

为什么?

因为大家开始不知道:

这个字段是什么意思?

这个表是谁维护的?

这个数据到底准不准?

“订单金额”到底是含税金额还是未税金额?

“用户数”到底是注册用户、活跃用户,还是去重后的付费用户?

这个 status=1 到底代表正常、完成,还是有效?

这时候你会发现,大规模数据平台真正缺的,往往不是存储能力。

而是两个看起来特别不起眼的东西:

元数据(Metadata)和数据目录(Data Catalog)。


一、先说一个最扎心的问题:为什么“有数据”不等于“能用数据”?

我们假设公司现在有一张订单表:

CREATE TABLE orders (
    id BIGINT,
    user_id BIGINT,
    amount DECIMAL(18,2),
    status INT,
    create_time DATETIME
);

从开发人员角度看,非常简单。

但如果把这个表交给一个刚入职的数据分析师,他可能马上开始问:

  • amount 是订单原价还是实付金额?
  • 包含优惠券吗?
  • 包含运费吗?
  • 是人民币吗?
  • status=1 是支付成功还是订单完成?
  • create_time 是下单时间还是入库时间?
  • user_id 是会员 ID 还是平台统一用户 ID?

你看。

数据库告诉你“这里有一个字段”,却没有告诉你“这个字段到底意味着什么”。

这就是元数据存在的价值。

简单理解:

数据是“东西”,元数据是“东西的说明书”。

比如:

数据:
orders.amount = 199.00

元数据:
字段名称:amount
中文名称:实付金额
数据类型:DECIMAL(18,2)
单位:元
是否含税:否
是否包含运费:是
业务定义:用户实际支付金额
数据负责人:订单中心
更新时间:实时

真正的大数据平台,不能只保存数据。

还必须保存“关于数据的数据”。


二、元数据到底是什么?别把它想得太复杂

很多人一听“元数据”,第一反应就是:

“这是不是又要搞一个特别复杂的平台?”

其实没那么玄乎。

我们每天都在接触元数据。

比如 Linux:

ls -lh orders.csv

你看到的:

-rw-r--r-- 1 root root 128M Sep 7 08:10 orders.csv

文件大小、权限、创建时间、修改时间,本质上都是元数据。

数据库里面也是一样:

SELECT
    table_name,
    column_name,
    data_type
FROM information_schema.columns
WHERE table_name = 'orders';

得到的:

orders | id          | bigint
orders | user_id     | bigint
orders | amount      | decimal
orders | status      | int
orders | create_time | datetime

这些就是典型的技术元数据。

但真正的大数据平台,需要的元数据远远不止这些。

通常可以分成几类。

1. 技术元数据

回答:

“数据长什么样?”

例如:

表名
字段名
字段类型
分区字段
索引
数据量
存储位置
更新时间

2. 业务元数据

回答:

“这些数据到底是什么意思?”

例如:

订单金额 = 用户实际支付金额
有效订单 = 支付成功且未取消的订单
活跃用户 = 过去30天至少登录一次的用户

这部分其实特别重要。

因为很多数据事故,并不是程序报错。

而是:

程序运行完全正常,但业务人员理解错了。


3. 管理元数据

回答:

“谁负责?”

比如:

数据Owner:订单中心
技术负责人:张三
业务负责人:李四
所属部门:供应链事业部
数据等级:重要

出现问题以后,至少知道找谁。


4. 运行元数据

回答:

“这份数据是怎么来的?”

例如:

MySQL
   ↓
Kafka
   ↓
Flink
   ↓
ODS
   ↓
DWD
   ↓
DWS
   ↓
BI Dashboard

这其实就是数据血缘。


三、没有数据目录的大数据平台,最后一定会变成“数据垃圾场”

我一直觉得,很多公司数据平台建设有一个非常明显的误区:

特别喜欢建表,却不喜欢管表。

今天业务部门说:

“我要一个订单宽表。”

建。

明天说:

“我要一个用户画像表。”

建。

后天:

“我要一个销售分析表。”

继续建。

一年下来:

dw_order
dw_order_new
dw_order_v2
dw_order_final
dw_order_final2
dw_order_final_new
dw_order_realtime
dw_order_realtime_v2
dw_order_analysis
dw_order_analysis_new

看到这里,是不是已经有点熟悉了?

更可怕的是,没人知道哪个是真的。

于是数据平台开始出现一种很奇怪的现象:

数据越多,沟通成本越高。

一个分析师想查“销售额”。

第一件事不是写 SQL。

而是去群里问:

“谁知道销售额应该查哪张表?”

然后可能得到三个答案:

A:查 dws_sales
B:我们现在都用 dws_sales_v2
C:别用这两个,昨天刚上线 sales_detail_new

这就是没有数据目录的后果。


四、数据目录解决的其实不是“查表”,而是“找答案”

一个真正的数据目录,不应该只是:

数据库
 └── 表
      └── 字段

如果只是这样,那充其量就是一个“高级版数据库客户端”。

真正的数据目录应该能够回答:

“我想找某个业务数据,应该去哪里找?”

比如搜索:

关键词:订单金额

系统返回:

数据资产:订单主题域

1. dws_order
   - 订单金额
   - 日更新
   - 数据Owner:订单中心

2. ads_sales_report
   - 销售金额
   - 实时
   - 数据Owner:数据中心

3. ods_order
   - 原始订单金额
   - T+1
   - 数据Owner:数据平台

甚至可以继续告诉你:

订单金额
   ↓
dwd_order_detail
   ↓
dws_order
   ↓
ads_sales_report
   ↓
销售大屏

这时候,数据平台才真正开始具备“知识”。


五、数据血缘为什么越来越重要?

假设老板发现:

“昨天销售大屏的金额怎么少了500万?”

传统运维可能这样排查:

数据库?
Kafka?
Flink?
Hive?
ClickHouse?
ETL?
BI?

一层一层查。

运维人员可能花几个小时。

但如果有完整的数据血缘,可以直接看到:

MySQL.orders
      ↓
Kafka.order_topic
      ↓
Flink.order_clean
      ↓
DWD_ORDER
      ↓
DWS_SALES
      ↓
ADS_SALES_REPORT
      ↓
BI Dashboard

然后发现:

Flink.order_clean
        ↓
status = 1

这个条件昨天被改成了:

status = 2

问题立刻定位。

这就是数据血缘最大的价值:

它让数据问题从“猜”变成“追”。


六、甚至代码本身,也应该成为元数据的一部分

比如我们有一段 ETL:

df = spark.sql("""
    SELECT
        user_id,
        SUM(amount) AS total_amount
    FROM dwd_order
    WHERE status = 1
    GROUP BY user_id
""")

df.write.mode("overwrite").saveAsTable("dws_user_amount")

表面上只是一个 Spark SQL。

但如果平台能够自动解析这段代码,就可以得到:

dwd_order.user_id
        ↓
dws_user_amount.user_id

dwd_order.amount
        ↓
SUM(amount)
        ↓
dws_user_amount.total_amount

dwd_order.status
        ↓
过滤条件

于是系统就知道:

dws_user_amount.total_amount
        来源:
dwd_order.amount

这就是所谓的字段级血缘

相比“表级血缘”,它更细。

当然,字段级血缘实现起来也更麻烦,因为你需要解析 SQL、Spark SQL、Flink SQL,甚至 Python、Java 代码。

但从长期来看,非常值得。


七、元数据平台最重要的一个能力:影响分析

这是我认为元数据真正开始“值钱”的地方。

假设开发人员准备修改:

ALTER TABLE dwd_order
DROP COLUMN amount;

如果没有元数据平台:

执行。

然后某一天:

BI挂了
报表挂了
数据接口挂了
推荐系统挂了
财务对账也挂了

大家开始开会。

如果有数据血缘:

amount
 ↓
dws_order
 ↓
ads_sales
 ↓
销售日报
 ↓
BI

系统直接告诉你:

删除 amount 将影响 3 张表、2 个任务、4 个报表。

这时候开发人员就不会那么头铁了。


八、这也是为什么“大数据治理”最后一定会走向元数据治理

很多人理解的数据治理是:

数据质量
数据标准
数据安全
数据权限

其实这些事情背后,都离不开元数据。

例如数据质量:

def check_data(df):
    assert df["user_id"].notnull().all()
    assert (df["amount"] >= 0).all()

问题来了:

为什么 user_id 不能为空?

为什么 amount 不能小于0?

因为元数据里面定义了:

user_id:
  nullable: false

amount:
  nullable: false
  min: 0

于是数据质量规则可以自动生成。

再比如数据安全:

phone:
  security_level: sensitive

id_card:
  security_level: highly_sensitive

平台就可以自动识别:

phone
 ↓
敏感字段
 ↓
限制访问
 ↓
脱敏
 ↓
审计

你会发现:

元数据并不是数据治理中的一个边角料。

它更像是整个数据治理体系的“地基”。


九、从运维角度看,元数据甚至可以帮助做智能化运维

这一点特别有意思。

传统监控关注的是:

CPU
内存
磁盘
网络
JVM
Kafka Lag
数据库连接数

这些当然重要。

但是现代数据平台还应该关注:

数据有没有来?
数据有没有变?
数据是不是延迟了?
数据质量有没有下降?
这个数据异常会影响哪些业务?

例如:

if actual_count < expected_count * 0.8:
    alert(
        "订单数据量异常",
        level="P1"
    )

进一步:

if data_quality_score < 0.95:
    alert(
        "数据质量下降",
        affected_assets=get_downstream_assets()
    )

再往前走一步:

数据异常
   ↓
元数据
   ↓
血缘关系
   ↓
影响业务
   ↓
自动生成告警等级

于是告警不再只是:

“DWS任务失败。”

而可以变成:

“订单数据延迟32分钟,预计影响销售日报、库存分析和经营驾驶舱,共17个下游数据资产。”

这才是真正对业务有意义的告警。


十、那么一个真正靠谱的数据目录,应该长什么样?

我个人比较推荐把它设计成下面这个结构:

                    数据目录
                       │
        ┌──────────────┼──────────────┐
        ↓              ↓              ↓
     数据资产        元数据          数据血缘
        │              │              │
        ↓              ↓              ↓
     数据库/表       技术元数据       上游
     API/文件        业务元数据       下游
     Kafka Topic     管理元数据       字段级
        │              │
        └──────────────┼──────────────┘
                       ↓
                    数据治理
                       │
          ┌────────────┼────────────┐
          ↓            ↓            ↓
       数据质量      数据安全      数据运维

最核心的其实就一句话:

让每一份数据都有身份、有说明、有主人、有来源、有去向。


十一、但这里还有一个坑:元数据平台千万别做成“手工登记平台”

这是很多公司踩过的坑。

刚开始:

“大家把表信息登记一下。”

于是创建一个 Excel:

表名 | 字段 | 描述 | Owner | 更新时间

第一周:

100%

一个月后:

70%

三个月后:

30%

半年后:

没人维护。

最后元数据平台自己都变成了“脏数据”。

所以我的观点非常明确:

元数据一定要自动采集为主,人工补充为辅。

例如:

MySQL
   ↓
Schema Collector
   ↓
Metadata
Kafka
   ↓
Topic Collector
   ↓
Metadata
Hive / Spark
   ↓
SQL Parser
   ↓
Lineage
Flink
   ↓
Job Parser
   ↓
Lineage

然后再让业务人员补充:

业务定义
Owner
数据等级
使用场景
备注

这样才比较现实。


十二、我一直觉得:数据平台的终点,不是“存更多数据”

做数据平台几年以后,你会慢慢发现一个特别有意思的变化。

最开始大家比:

谁的集群大?

后来比:

谁的数据多?

再后来比:

谁的数据实时?

但真正到了大型企业,你会发现:

数据多并不代表数据资产多。

100TB 的垃圾数据,不如 1TB 的高质量数据。

10000 张没人知道用途的表,不如 1000 张定义清晰、有Owner、有血缘、有质量保障的表。

所以我越来越认同一个观点:

数据平台真正的核心竞争力,不是“存了多少数据”,而是“有多少数据能够被可信地找到、理解和使用”。

而元数据和数据目录,恰恰就是连接这一切的那根线。


最后:别等数据平台“乱成一锅粥”了,才想起来治理

如果你的公司现在只有几十张表,可能觉得:

“搞什么数据目录,太重了。”

确实。

但如果已经发展到:

1000+ 张表
100+ 个数据任务
几十个业务系统
Kafka + Flink + Spark + Hive + ClickHouse

还没有统一的元数据体系,那我建议尽早开始。

不需要一上来就搞一个“宇宙级数据治理平台”。

可以先做三个东西:

第一,统一数据资产登记。

表 → 字段 → Owner → 业务定义

第二,自动采集元数据。

数据库
Kafka
Hive
Flink
Spark
API

第三,建立数据血缘。

Source
  ↓
ODS
  ↓
DWD
  ↓
DWS
  ↓
ADS
  ↓
BI

然后逐步把:

数据质量
数据安全
数据权限
影响分析
智能告警

全部建立在元数据之上。

因为到了大规模数据平台阶段,真正可怕的已经不是:

“我没有数据。”

而是:

“我有一大堆数据,但我不知道哪个是真的、谁负责、从哪来的、改了会影响什么,更不知道能不能放心用。”

这时候,数据就不再是资产了。

它只是堆在数据湖里的数字。

而元数据和数据目录真正要解决的,就是把这些“数字”,重新变成企业真正可以理解、管理和使用的数据资产

—— Echo_Wish

目录
相关文章
|
2月前
|
人工智能 算法 大数据
为什么物流公司都在卷“算法”?大数据如何让配送路线越跑越聪明
为什么物流公司都在卷“算法”?大数据如何让配送路线越跑越聪明
176 3
|
6天前
|
Kubernetes NoSQL 关系型数据库
别再把 K8s 当“万能盒子”:CockroachDB、Vitess、Cassandra 到底怎么跑?
别再把 K8s 当“万能盒子”:CockroachDB、Vitess、Cassandra 到底怎么跑?
62 0
别再把 K8s 当“万能盒子”:CockroachDB、Vitess、Cassandra 到底怎么跑?
|
4天前
|
存储 Prometheus 监控
Prometheus 监控越跑越胖?别急着加硬盘,TSDB 压缩才是关键
Prometheus 监控越跑越胖?别急着加硬盘,TSDB 压缩才是关键
70 0
|
7天前
|
数据采集 SQL BI
DataOps 真不是“把数据跑起来”:真正难的是出了问题,你能不能找到锅在哪
DataOps 真不是“把数据跑起来”:真正难的是出了问题,你能不能找到锅在哪
53 0
|
22天前
|
弹性计算 小程序 iOS开发
阿里云无影云电脑个人版指南:快速购买、选择无影套餐、配置云电脑、连接及使用全流程
阿里云无影云电脑个人版,支持Windows/macOS/手机多端接入,提供黄金至黑金6档灵活套餐(14.9元/月起),含系统盘、数据盘、带宽及灵豆配额,适用于办公、学习、设计与游戏。一键配置、即连即用,休眠不计费,数据安全可靠。
259 2
|
6月前
|
安全 前端开发 NoSQL
基于Spring Boot+Vue的中西医一体化诊所HIS源码,具备高安全性、模块化设计与易扩展性
云诊所系统是基于Spring Boot+Vue的中西医一体化HIS源码,支持电子病历、处方管理、药房进销存、医保结算及会员服务。具备高安全性、模块化设计与易扩展性,已落地百余项目,适配社区卫生站、门诊部等基层医疗机构。
325 7
|
6月前
|
运维 JavaScript BI
SaaS ERP系统源代码,完美运行的项目源码
这是一款基于SpringBoot+Vue的SaaS ERP源码系统,覆盖采购、销售、生产、财务等全业务模块,支持自定义流程、报表与表单,具备软件著作权,可商用及二次开发,专为中小企业提供灵活、易用、云端化的企业管理解决方案。
263 2
|
7月前
|
JavaScript Java
医院随访系统源码:SpringBoot + Vue,前后端分离模块化设计,扩展性强
自主研发的医院患者随访系统,满足等级评审要求。支持微信、短信、电话等多方式随访,覆盖出院随诊、满意度调查、科研随访及投诉回访等场景。具备自定义模板、智能提醒、表单设计、健康宣教与闭环管理功能,提升随访效率与患者满意度。
244 2
|
4月前
|
供应链 前端开发
对公客户经理绩效与团队长奖金设计:制造业链主客群协同经营责任制解析
本文提出制造业链主竞争背景下对公协同经营责任制奖金设计(2026年版),聚焦团队长绩效重构,首创“拓新、活跃、协同、风险”四维拆解框架,推动奖金从“结果分配”转向“责任分配”,解决开户多但沉默、协同难归因、普惠与链主资源冲突等痛点,助力银行深耕客群、提升综合价值。(239字)
|
3月前
|
运维 BI API
企业级ERP管理系统源码,采用SpringBoot+Vue+UniAPP技术栈,支持二次开发及商用授权
企业级ERP源码,基于SaaS架构,采用SpringBoot+Vue+UniAPP技术栈,支持Web/APP/桌面多端访问。覆盖采购、销售、生产、财务、CRM、OA等全业务流程,提供多租户隔离、弹性扩展与自动化运维能力,支持深度二次开发及商用授权。
234 0