4. 数据资产目录建设

数据资产目录,说白了就是企业数据资产的「黄页」。你想想看,一个公司几千张表、几万个字段,如果没有一个统一的目录,业务部门想找「客户近30天交易金额」这个指标,得问遍所有人。我经历过这种痛苦——有一次业务方催着要数据,我硬是花了三天才搞清楚哪个表才是准确的。

所以,目录建设不是搞个搜索框就完事了。它背后是一整套体系:怎么分层、怎么采集、怎么让人找得到、怎么持续维护。这一章,我把这些年的实战经验拆开来讲。

4.1 目录架构设计:分层与分类

目录架构是地基。地基没打好,后面全是坑。我个人习惯把目录分成三层:

  • 业务层:面向业务用户,按主题域、业务过程组织。比如「营销域-活动分析-活动ROI」。
  • 技术层:面向数据工程师,按数据源、数据库、表结构组织。比如「ODS层-交易库-订单表」。
  • 指标层:面向分析师和管理层,按指标体系组织。比如「北极星指标-营收-GMV」。

这三层不是孤立的。它们之间要有映射关系。业务层的「活动ROI」要能追溯到技术层的具体表和字段,指标层的「GMV」也要能下钻到业务层的「交易金额」。

核心原则:目录架构要支持「业务找得到、技术看得懂、管理管得住」。

下面这张图是我常用的目录分层架构,你可以参考:

数据资产目录分层架构 业务层(面向业务用户) 主题域:营销域 | 交易域 | 用户域 | 商品域 业务过程:活动分析 | 订单分析 | 用户画像 | 商品分析 核心资产:活动ROI | 客单价 | 用户留存率 | 商品动销率 指标层(面向分析师/管理层) 北极星指标:GMV | 活跃用户数 | 净利润 派生指标:同比 | 环比 | 贡献度 | 达成率 技术层(面向数据工程师) 数据源:MySQL | Hive | Kafka | ClickHouse 分层:ODS | DWD | DWS | ADS 物理资产:数据库名.表名.字段名 双向映射:业务↔指标↔技术

分类维度上,我建议至少包含:

  • 主题域分类:按业务板块划分,如营销、交易、用户、商品、财务。
  • 系统来源分类:按数据产生系统划分,如CRM、ERP、WMS、APP埋点。
  • 数据敏感度分类:公开、内部、敏感、高度敏感,用于权限控制。
  • 生命周期分类:规划中、建设中、已上线、已下线。

我的经验:分类不要超过4层。超过4层,用户就迷路了。我曾经见过一个目录分了7层,结果没人用——因为点5次才能找到想要的表。

4.2 元数据采集与注册

目录建好了,数据从哪来?靠手动录入?别开玩笑了。几百张表,手动录入不仅慢,还容易出错。我见过一个团队手动录元数据,结果表名写错了,业务方查了三天才发现。

正确的做法是:自动化采集 + 人工补录。

4.2.1 技术元数据自动采集

技术元数据包括:表结构、字段类型、分区信息、主键、索引、DDL变更历史等。这些信息,数据库本身就有。我们只需要写采集器去捞。

下面是一个简化的Hive元数据采集脚本示例:

-- 采集Hive表元数据
SELECT 
    d.NAME AS database_name,
    t.TBL_NAME AS table_name,
    t.TBL_TYPE AS table_type,
    tp.PARAM_VALUE AS table_comment,
    c.COLUMN_NAME,
    c.TYPE_NAME AS column_type,
    c.COMMENT AS column_comment,
    c.INTEGER_IDX AS column_order
FROM 
    metastore.TBLS t
JOIN metastore.DBS d ON t.DB_ID = d.DB_ID
LEFT JOIN metastore.TABLE_PARAMS tp 
    ON t.TBL_ID = tp.TBL_ID AND tp.PARAM_KEY = 'comment'
LEFT JOIN metastore.COLUMNS_V2 c 
    ON t.TBL_ID = c.CD_ID
WHERE 
    d.NAME = 'your_database'
ORDER BY 
    t.TBL_NAME, c.INTEGER_IDX;

采集频率怎么定?我建议:

  • 全量采集:每天凌晨一次,覆盖所有表。
  • 增量采集:每15分钟一次,只采集DDL变更的表。
  • 实时采集:通过监听DDL事件(如Hive Metastore事件),秒级同步。

4.2.2 业务元数据人工补录

技术元数据机器能搞定,但业务元数据——比如「这个字段是什么意思」「这个指标怎么算的」——必须靠人。我建议设计一个「元数据注册表单」,包含:

字段 说明 是否必填
资产名称 业务友好的中文名称,如「近30天活跃用户数」 是
资产描述 一句话说清楚这个资产是干什么的 是
所属主题域 从预定义的主题域列表中选择 是
业务负责人 谁对这个数据的质量负责 是
计算口径 指标的SQL定义或业务规则 指标类必填
数据来源 来自哪个系统、哪个表 是
更新频率 T+1、实时、小时级 是
敏感度等级 公开/内部/敏感/高度敏感 是

注意:人工补录的元数据一定要有审核流程。我曾经遇到过业务方乱填「计算口径」,导致下游报表算出来的数据全是错的。建议设置「数据治理委员会」角色,负责审核业务元数据的准确性。

4.3 目录检索与导航

目录建好了,元数据也采集了,但用户找不到,等于白建。我见过太多目录项目,上线后日活不到10个人。为什么?因为搜索太难用了。

好的目录检索,要做到三点:

  • 模糊搜索:用户输入「活跃用户」,能搜到「DAU」「日活跃用户数」「活跃用户明细表」等。
  • 多维度筛选:按主题域、数据源、负责人、敏感度等维度快速过滤。
  • 关联推荐:搜「订单表」时,自动推荐相关的「订单明细表」「订单汇总表」「退款表」。

导航方面,我建议提供两种模式:

  1. 树形导航:按主题域→业务过程→资产名称,逐级展开。适合知道大概分类的用户。
  2. 搜索直达:输入关键词直接定位。适合知道具体名称的用户。

另外,热门资产排行榜也很有用。把最近7天被搜索、被查看最多的资产排在前面,新用户进来先看这些,能快速了解核心数据资产。

一个小技巧:在搜索结果中,把「有业务描述」的资产排在「只有技术元数据」的资产前面。因为前者说明有人维护过,可信度更高。我做过统计,这个排序策略能让用户找到正确资产的效率提升40%。

4.4 目录运营与维护

目录不是建完就完事了。它是个活物,需要持续运营。否则,三个月后,目录里的信息就过时了。

4.4.1 元数据质量监控

我建议建立一套元数据质量监控规则:

  • 完整性检查:是否有表没有业务描述?是否有字段没有注释?
  • 准确性检查:技术元数据是否与数据库实际结构一致?比如表被删了,目录里还在。
  • 时效性检查:超过30天未更新的资产,标记为「待确认」。

下面是一个简单的质量评分逻辑:

-- 元数据质量评分(伪代码)
score = 0
IF 有业务描述 THEN score += 30
IF 有业务负责人 THEN score += 20
IF 有计算口径 THEN score += 20
IF 最近30天有更新 THEN score += 15
IF 有数据血缘 THEN score += 15
-- 总分100分,低于60分标记为「低质量资产」

4.4.2 资产生命周期管理

数据资产有生命周期。我一般这样管理:

阶段 状态 运营动作
规划中 草稿 仅创建者可见,待审批
已上线 发布 全员可见,定期检查质量
已废弃 下线 标记为废弃,保留历史记录,但不出现在搜索结果中
待清理 归档 超过180天无人访问,自动归档

4.4.3 运营机制

光有工具不够,还得有机制。我建议:

  • 月度元数据治理会议:回顾元数据质量评分,讨论问题资产的处理方案。
  • 季度资产盘点:清理废弃资产,更新过时信息。
  • 年度目录优化:根据业务变化,调整主题域分类和目录结构。

核心观点:目录运营的本质是「让对的人,在对的时间,维护对的数据」。技术能解决80%的问题,剩下20%靠制度和责任心。

嗯,这一章的内容就这些。目录建设是个慢功夫,别指望一蹴而就。先把架构搭好,把采集跑通,再慢慢优化搜索和运营。只要坚持做,半年后你会看到效果的。