元数据基础:技术元数据、业务元数据、管理元数据

元数据,说白了就是“数据的数据”。我习惯把元数据分成三类来管理。

为什么要这么分?你想想看,不同角色关心不同信息。开发关心数据库字段类型,业务关心字段的业务含义,管理者关心谁改了数据。所以三类刚刚好。

元数据三大分类结构图 元数据 技术元数据 业务元数据 管理元数据 数据模型 · 字段类型 · ETL规则 业务定义 · 口径 · 数据词典 访问权限 · 质量规则 · 变更记录 三类元数据缺一不可 技术元数据保障可读性 · 业务元数据保障可理解性 · 管理元数据保障可信性 我建议项目启动时就明确分类,不要等出问题了再补

技术元数据

技术元数据,描述的是数据的技术细节。数据库的表结构、字段类型、索引,ETL 的调度规则,API 的请求格式,这些都是技术元数据。

我在项目中遇到过数据模型文档完全空白的情况。联合查询时全靠猜字段含义。嗯,后来我要求每张表都写技术元数据。

举个例子,一个商品表的字段描述可以写成这样:

{
  "table": "product",
  "schema": "public",
  "fields": [
    {
      "name": "product_id",
      "type": "BIGINT",
      "nullable": false,
      "comment": "商品主键,自增"
    },
    {
      "name": "product_name",
      "type": "VARCHAR(256)",
      "nullable": false,
      "comment": "商品名称(用户端展示)"
    },
    {
      "name": "category_id",
      "type": "INT",
      "nullable": true,
      "comment": "分类外键,关联 category 表"
    }
  ],
  "primary_key": ["product_id"],
  "indexes": [
    {"name": "idx_category", "columns": ["category_id"]}
  ]
}
我的小建议:技术元数据最好随代码一起版本管理。我之前团队用 JSON 文件放在 Git 仓库里,建表时直接从中生成 DDL,效果不错。

业务元数据

业务元数据,解释数据在业务场景中的含义。字段 “cust_id” 是客户编号还是交易对手?数据的口径是什么?业务元数据就是回答这些问题的。

我曾接手过一个标注团队的元数据,字段名叫 “status”,有人写 “0/1”,有人写 “A/B/C”。后来统一加了业务词典,才算稳定下来。

业务元数据通常包含:

  • 业务定义 —— 字段在真实业务中代表什么
  • 数据口径 —— 聚合逻辑、计算规则
  • 枚举值映射 —— 代码值与业务含义的对照表
  • 关联关系 —— 跨系统的数据流转关系
避坑指南:我曾经在一次医药项目中吃过亏。业务元数据里没写数据有效期。结果统计时报了过期数据。嗯,从那以后我坚持业务元数据必须包含有效期规则。

管理元数据

管理元数据,描述数据的管理信息。谁创建的?什么时候修改的?访问权限怎么控制的?数据质量规则是什么?

这类元数据经常被忽略。但数据出问题时,它往往是救命稻草。比如数据被误删了,管理元数据里记录了操作人和时间,就能快速回滚。

一个管理元数据的示例:

{
  "dataset": "user_profile",
  "version": "v2.3.1",
  "created_at": "2025-01-15T10:00:00Z",
  "created_by": "data_team_alice",
  "updated_at": "2025-03-20T14:30:00Z",
  "updated_by": "data_team_bob",
  "access_control": {
    "owner": "data_platform_department",
    "readers": ["bi_team", "recommend_team"],
    "writers": ["data_ingestion_service"]
  },
  "quality_rules": [
    {"rule": "not_null", "fields": ["user_id", "email"]},
    {"rule": "unique", "fields": ["user_id"]},
    {"rule": "range_check", "fields": ["age"], "min": 0, "max": 120}
  ],
  "retention_days": 730
}
实践要点:我建议你至少为每个数据集维护一个管理元数据文件。特别是质量规则部分,数据管道跑完之后直接校验这些规则,能拦住大部分脏数据。

三类元数据的核心差异

我把它们的区别整理成一个表格。你可以在项目中选择对应的字段来填充:

分类 核心关注点 典型字段 面向角色
技术元数据 数据的技术实现 数据类型、长度、索引、ETL 调度配置 数据工程师、后端开发
业务元数据 数据的业务语义 业务定义、数据口径、枚举值、关系 业务分析师、产品经理
管理元数据 数据的治理与合规 责任人、访问权限、质量规则、版本 数据管理员、安全团队

三类元数据相辅相成。技术元数据保障可读性,业务元数据保障可理解性,管理元数据保障可信性。我个人习惯在项目启动时就明确分类,而不是后期补。提前把元数据模板定下来,能省掉后面大量扯皮的时间。