1. 标准化解决的四类问题,和你想象中不太一样
1.1 “活跃用户”三个口径,三个部门各说各话
如果你所在的团队,同一张订单表被不同项目组建了三遍,字段名、字段类型、枚举值都不一样;同一个“活跃用户”在两份报表里能差出百分之三十——那这篇文章就是为你准备的。
过去几年我做数据平台和数据治理相关的工作,踩得最多的坑,反而不是集群跑得慢、技术选型不对这些,而是数据标准不统一带来的连锁问题。举一个非常常见的场景:业务部门每天早上开例会看“日活跃用户”,运营部分定义是“启动过 App 就算”,产品部分定义是“启动了且至少产生一次页面浏览”,商业化团队更狠,要求“完成过核心转化行为才计入活跃”。三个团队都有理,但同一个周二,运营看到 320 万,产品看到 218 万,商业化看到 37 万。大家都对,指标就是对不上。问题出在哪里?不在算法,不在数仓,在于口径没有标准化。
这不是编出来的段子,而是很多公司数据团队的日常。你以为是业务方“不讲理”,其实是数据侧没有把标准化当成基础设施来做。技术平台再牛,数据进去是脏的,出来一定是脏的。这也是为什么我想把这几年跑过的弯路、验证过的做法系统地写出来:大数据标准化不是拿个 Excel 列几个命名规则就完事,它是一套从源头上控制数据质量的完整打法。
1.2 标准化的本质:把“方言”统一成“普通话”
很多人对“标准化”的第一反应是“统一命名规则”“统一字段类型”,这没错,但只看到了表层。标准化的本质,是让一套数据在不同系统、不同团队、不同场景之间流转时,仍然能被无歧义地理解和使用。
我习惯用一个类比来向别人解释这件事:一个公司有三十个部门,每个部门都有自己的方言,互相听不懂,开会必须带翻译。数据系统之间也是这样。A 系统的客户编号叫customer_id,B 系统叫uid,C 系统叫cust_no;订单状态有人用数字0/1/2,有人用字符串pending/paid/canceled,还有人用中文“待支付/已支付/已取消”。数据进入数据湖之后,如果不做标准化,你连做主键关联都要写一堆复杂 Mapping,更别提跨部门拉通分析了。
标准化的核心,其实是做两件事:给数据发“身份证”和给数据上“户口”。身份证解决的是唯一标识问题——同一件事物,在任何系统里都能被准确识别为同一件事物;户口解决的是归属和分类问题——数据从属于哪个业务域、哪个层级、哪个生命周期阶段、哪个安全级别,一目了然。这两件事做扎实了,后续的数据质量检查才有锚点。
1.3 标准化不是成本,是对质量的投资
有管理者觉得标准化是“增加工作量”“拖慢上线速度”,这个想法可以理解,但只盯着短期进度看,账算反了。
在没做标准化的情况下,数据质量问题的排查成本是成倍叠加的。我曾经遇到一个案例:一个报表里的订单金额比另一个报表少了 8%,两边都是“从数仓读的”,团队为这事排查了整整一周,最后发现是一个历史任务用了不同的存储引擎,某个字段的精度被四舍五入到了整数位。你当然可以在每一个报表项目里做局部校验,但问题在于,如果底层模型和口径不统一,局部校验永远只能堵住已经出现的洞,堵不住下一个。
标准化相当于在源头上做一次性的约束,后面的校验和监控复用同一套规则。前期投入时间,后期省下的是无数个通宵定位问题的救命时间。对于需要跨团队协作、对数据准确率要求高的场景来说,标准化不是可选项,而是必选项。
2. 标准化动手之前,先盘点家底
2.1 对应大数据架构的四个层次,判断标准重点
很多团队跳过盘点直接定标准,结果就是标准定了没人遵守,因为大家发现“改了上线时间根本来不及”。正确的做法,是先摸清楚自己的数据资产分布在哪些层级,再决定每个层级该管到什么程度。
通常我们会把大数据架构拆成四个层次:数据采集层、数据存储层、数据处理与分析层、数据应用与服务层。每一层的标准化重点完全不同,你需要先把重点区分清楚。
- 数据采集层:重点管数据源接入的规范性。数据从哪些业务系统来,用了什么采集方式(日志埋点、数据库直采、消息队列),每条数据的元信息(产生时间、来源系统、版本号)是否齐全。这一层管的是“进门先登记”。
- 数据存储层:重点管数据模型、分区策略、存储格式、压缩策略、生命周期规则。是明细层、汇总层、还是应用层,每层表怎么命名,分区粒度到天还是到小时,存 ORC 还是 Parquet,冷热数据怎么分层。这一层管的是“住的地方要规矩”。
- 数据处理与分析层:重点管计算任务的质量,包括 SQL 规范、调度依赖、幂等性、血缘关系。同一个指标只能用一条加工链路产出,不能这张表算一遍、那张表又算一遍。这一层管的是“做饭的流程要标准”。
- 数据应用与服务层:重点管对外输出的格式规范。报表指标接口的返回结构、权限控制、数据保密等级标注、数据脱敏规则。这一层管的是“出门见人要得体”。
集群部署策略也值得在这里提一嘴:不同规模的集群,存储层和计算层的标准侧重点差别很大。小规模测试集群可以接受“先跑通再说”,生产环境集群则必须在一开始就把分桶、分区、副本策略定好,否则后面数据量涨上去了,再想改存储标准,迁移成本是灾难级的。
2.2 三份清单,摸到字段级的家底
盘点这件事说起来简单,做起来很容易流于形式。我的建议是,不要只做“系统清单”这种泛泛的东西,要做就做到字段级。至少整理出三份清单:
| 清单 | 包含内容 | 用途 |
|---|---|---|
| 系统与表单清单 | 系统名称、库表名、负责人、数据量级、更新频率 | 搞清楚有哪些“数据源”和“数据落点” |
| 核心字段清单 | 每个重要表的字段名、类型、含义、是否主键、来源 | 用于发现同名不同义、同义不同名的问题 |
| 指标与口径清单 | 指标名称、定义、计算公式、所属部门、使用场景 | 用于拉齐跨团队指标口径 |
做第二份清单的时候,最容易发现触目惊心的问题:同一个业务实体的属性,在不同表里被存成完全不同的类型。我举个例子,一张表的order_amount是decimal(10,2),另一张表同一个含义存成了string,还有一张表干脆叫amount_total,类型是float。字段级盘点做完,你会对“为什么报表总是对不上”有一个全新的认识。
做盘点不需要开发专门的平台,初期用 Excel 或者在线文档就能跑起来,关键是让每个系统的负责人亲自填,别替他们写。别问“你这套系统有哪些表”,要问“每个表的哪些字段是核心维度和度量”,这样出来的清单才有实操价值。
2.3 优先级判断:先标准 80% 的高频数据,再管 20% 的长尾
盘完家底之后,很多人会想“一口气把所有历史问题都解决掉”。冷静一点,这是标准的陷阱。做标准化不是搞革命,是搞建设。存量数据是多年堆积出来的,想一次性把所有内容都标准化,不仅周期长,而且中间业务方会频繁变动,很容易把你打回原形。
我通常用的判断标准是“高频优先 + 影响面优先”:
- 第一优先:每日被大量报表、下游任务依赖的核心表(比如订单、用户、商品、支付流水);
- 第二优先:跨团队共享的维表和数据字典(比如城市维表、类目维表、销售区域树);
- 第三优先:影响对外服务结果的核心指标口径(比如 GMV、活跃用户数、转化率);
- 长尾:低频的一次性分析表、临时数据、已经没人维护的僵尸任务,先不动。
这样做的好处是把有限的人力集中在收益最大的地方。与其让二十个团队同时配合做一个庞大但遥远的全量标准,不如先把五张核心表和八个核心指标规范掉,让业务方立刻感觉到“报表对得上了”,后续再推其他数据的标准时,阻力会小得多。
3. 从字段到指标:标准化的四级实操
3.1 字段级规范:类型、长度、命名不搞“一团乱码”
字段级规范是标准化体系里最基础、也是直接见效的一级。没有这一级,后面的维度建模和数据质量检查全都是空中楼阁。
我一般会把字段级规范拆成几个硬性规则:
- 命名统一:业务含义相同的一个字段,在任何系统、任何表里的名字必须一致。比如客户主键统一叫
customer_key,不允许再出现cust_id、client_no、user_id这种别名。这个规则听起来简单,执行的时候需要靠工具做扫描,看到不合规的表名/字段名就报警。 - 类型统一:同类字段的数据类型必须一致。金额统一用
decimal(18,4),日期统一用date,时间戳统一用timestamp,状态位统一用字符串枚举。不允许一个order_status在 A 表是整数、在 B 表是字符串。 - 长度和精度统一:字符串长度按业务上限设置,不要一个 varchar(10) 一个 varchar(500) 随便拍脑袋。数值精度尤其要谨慎,金额字段不能用
float,否则后续累加统计时误差会越来越大。 - 默认值统一:每个字段必须定义“空值”的表示方式。是允许 NULL,还是用固定的虚拟值(比如
-999),还是用空字符串,必须有明确规定。我见过一套系统里,空值同时存在NULL、''和'N/A'三种形态,做聚合统计时的纠结程度堪比猜谜。
字段级规范一定要落到书面,并且和开发规范绑定起来。你在数仓里新加表的时候,开发规范里就写着“字段命名需遵循数据字典”,不满足的不予发布上线。只有把规则嵌进流程里,标准才不会沦为摆设。
3.2 维度建模:让所有分析都在“一张地图”上跑
字段级标准解决了“每个字段叫什么”,维度建模解决的是“表与表之间怎么关联”。
很多数据分析项目做着做着就变成修罗场,原因就是维度的关联关系不统一。有人用旧版城市维表,有人用新版,联出来的数据自然对不上。所以标准化到了一定阶段,必须上维度建模这一层。
比较稳健的做法,是建设一套公共维度模型:
- 统一日期维度:一张日期维表,带上年、季度、月、周、日、自然日序号、工作日标记、节假日标记等属性。所有报表在按时间统计时,必须关联这张统一日期维表,不允许每张事实表里自己写一套日期逻辑。
- 统一组织维度:部门、区域、门店、销售大区等组织维度做成一张 SCD 缓慢变化维,保留历史版本和生效时间。这样同一个销售区域在历史口径里怎么归属,未来口径里怎么归属,都有据可查。
- 统一通用维表:城市维表、渠道维表、商品类目维表,全部做成由数据团队统一维护的维表,并对外提供授权查询接口。业务方项目里要用,只能 join 这套公共维表,不能自建副本。
有人会问,维度建模是不是意味着必须上 Kimball 那套星型模型?其实不必框死。如果你的场景是明细级查询和宽表需求为主,那么“事实明细 + 公共维表”的组合已经能解决绝大多数问题。关键不是模型长得标不标准,而是所有人都用同一套关系去解读数据。
3.3 指标口径登记册:每个人拿到的是“标准答案”
指标口径不统一,是数据治理里最痛的点之一。这也是为什么一定要做指标口径登记册(也叫指标字典)。
指标口径登记册的每一条至少应该包含:
- 指标名称(统一命名,不允许出现“活跃客户数”和“活跃客户量”两个名称);
- 指标体系归属(属于流量域、交易域还是用户域);
- 原子指标定义(比如“订单支付金额”是指用户完成支付动作后的订单金额);
- 派生指标定义(比如“同比”“环比”的计算窗口是多长);
- 计算公式和取数逻辑(从哪张表、哪个字段、哪个过滤条件算出来);
- 统计粒度(按天、按周、按门店、按用户);
- 负责人和应用场景。
举个具体的例子。曾经有一家公司内部同时存在“销售额”和“销售净额”两个指标,前者包含退款,后者剔除退款。某个业务团队为了 KPI 好看,写报表时永远用“销售额”,同别人交流数据时却说“我们净额也一样在涨”。下个月复盘,数据对不上,双方都觉得自己没错——因为他们看的是两个指标。把口径登记册建起来以后,凡是对外发布的报表,必须先引用注册过的指标编号,没注册不发布。这一招能解决大部分指标扯皮问题。
指标口径登记册维护的时候要注意:不追求“一个指标只有一个定义”,那是理想状态;现实中允许存在“销售额”和“销售净额”两个指标并存,但它们的差异必须明明白白写出来。口径可以不同,但不能不清不楚。
3.4 主数据和参考数据:脏乱差的根源在源头
字段、维度、指标都规范化之后,还容易漏掉一个环节:主数据和参考数据。
主数据是业务运营过程中最核心的“业务对象”,比如客户、供应商、产品、员工、门店。参考数据则是业务对象的枚举值、分类代码,比如订单状态码、国家代码、会员等级代码。
主数据不加管控的后果:同一个客户在一个系统里叫“张三”,在另一个系统里叫“Zhang San”,还有一个系统里把手机号当成名字存。想做跨系统的客户视图,发现根本合并不起来。常见做法是建立统一的主数据管理台账,把客户标识、手机号、身份证件号、邮箱、统一社会信用代码等识别键收拢起来,生成一个虚拟的通用主键customer_key,用于所有下游系统的关联。
参考数据相对简单,但同样要建代码表统一管理。比如订单状态统一用PENDING / PAID / CANCELLED / REFUNDED,业务系统里的中文状态和数字状态全部通过映射关系转换到标准枚举。代码表的变更必须在变更管理流程里记录,出现新枚举值时要先更新代码表,再改业务系统,不能一边业务系统已经生产了新状态,一边数仓的字典表还没跟上。
4. 搭建数据质量检查框架,用六个维度量化数据
4.1 质量检查框架的六个核心维度
标准定完之后,下一步是持续监控数据有没有“跑偏”。数据质量的可衡量维度,业内通常归纳为六个方面:
| 维度 | 含义 | 现实中的反例 |
|---|---|---|
| 完整性 | 数据是否存在缺失 | 订单表的支付时间大面积为空 |
| 准确性 | 数据是否真实反映业务事实 | 订单金额被四舍五入到整数位 |
| 及时性 | 数据是否在预期时间内可用 | 昨天该跑完的日报,凌晨 3 点还没产出 |
| 一致性 | 同一事物在不同系统中是否一致 | 数据仓库与业务库的余额差了 10 万 |
| 唯一性 | 是否存在重复记录 | 同一订单号在事实表里出现两次 |
| 有效性 | 数据是否符合格式和值域约束 | 年龄字段出现 200,省份代码不存在 |
这六个维度听起来很像教科书,但落到实处,它们是每一个指标背后可以配置的检查规则。你不需要一次把六十条规则全配上去,但核心字段、核心指标至少要在关键维度上有规则兜底。
4.2 检查规则怎么配置
配置规则的原则是:先堵大窟窿,再求精细化。比如对一个订单主表,优先配以下规则:
- 完整性:
order_id不能为空,payment_date非空率不能低于 99.5%; - 唯一性:
order_id不能有重复; - 有效性:
order_amount > 0;order_status必须在标准枚举值范围内; - 准确性:抽取 1000 条明细数据与源系统抽样比对,误差不能超过 0.1%;
- 一致性:当日订单总量和实时数仓里统计的订单总量差异不能超过 50 条;
- 及时性:每日的订单分区数据必须在次日凌晨 2 点前写入完毕。
这些规则不需要一次性写死,先用规则的“检查频率”和“影响范围”两个维度去排优先级。影响到财务披露、高管看板、对客数据报表的规则,一定要最先上。
4.3 数据质量评分怎么算
定了规则,还要能够量化为一个分,否则业务方没法直观感受到“质量是变好还是变差”。我在项目里常会用加权评分的方式,给每条规则设定一个权重,权重之和为 1.0。
举个例子,某订单表当天挂了 7 条检查规则:
| 规则 | 权重 | 当日通过率 |
|---|---|---|
| order_id 非空 | 0.15 | 99.50% |
| 支付时间非空 | 0.10 | 98.90% |
| order_id 唯一 | 0.15 | 99.20% |
| 金额大于 0 | 0.20 | 99.00% |
| 状态码枚举有效 | 0.10 | 100.00% |
| 当日数据按时产出 | 0.15 | 98.50% |
| 与源系统一致性比对 | 0.15 | 99.30% |
总分就是每一条规则的通过率乘以权重之后再求和:0.15×99.5 + 0.10×98.9 + 0.15×99.2 + 0.20×99.0 + 0.10×100 + 0.15×98.5 + 0.15×99.3 = 99.17 分。
这个 99.17 分能干什么?一是可以用来做趋势监控,连续几天低于 98 分就自动告警;二是可以作为数据团队向业务方证明“数据质量在改善”的量化依据。评分不需要绝对精确,稳定和趋势比绝对值更重要。
4.4 质量报告和闭环整改机制
有了评分之后,还要把质量问题和“人”挂钩,否则监控就是纸上谈兵。
我在项目里推过一种做法:每天生成一张数据质量日报,列清楚今天有哪些表的哪些规则未通过,每条未通过记录对应到负责人。表格行项目包括系统名称、表名、规则名、问题描述、影响范围、责任人、整改状态。第二天日报会继续显示未整改项。每周把日报聚合成周报,发到跨团队的数据治理群里,连续两周未解决的项目需要负责人出来解释原因。
关键在于两点:责任到人、状态可追踪。没有责任人的质量问题永远不会被解决。数据标准化也一样需要“持续运营”的思维——它不是上线之后就一劳永逸的工程,而是每个迭代要回归检查的常规动作。
5. 标准化推进中绕不开的冲突,以及我的应对方式
5.1 业务急着上线 vs 标准还没定,怎么办
做标准化的人,经常会陷入一种“既要又要”的拉锯战。业务方明天就要上线新活动,今天的数据接入怎么可能等到你先把数据字典定完?
我的处理经验是:先立一块“最小标准”的挡板,再逐步补齐。最小标准就是三个硬底线——主键必须有、关键字段类型必须有明确定义、核心指标必须有口径说明。满足这三条,允许先临时接入生产。上线之后,在一到两个迭代周期内补齐剩余规范。
这种方法的好处是不拦业务上线,坏处是需要有人持续跟进。如果团队里没有专门的数据治理角色,后面这批“欠债”大概率会被遗忘。所以我会在标准化的启动阶段,先把治理责任落实到具体人头,再谈流程。没人负责的推进方案,和没推进没什么两样。
5.2 指标口径之争,本质是话语权问题
推进指标口径统一的时候,几乎一定会遇到业务方的抵触。哪个部门都不愿意放弃自己对“活跃用户”的定义权,因为这关系到 KPI 怎么算。
这种冲突不能靠“数据团队拍板”来解决,更合适的办法是建一个“跨团队指标评审小组”之类的机制。每个核心指标都拉到相关业务方坐下来,把定义、边界、特殊情况全都摆在桌面上讨论。结果是产出一个所有人都认可的版本,并且公示。后面再有疑问,就回到公示版去找答案。
这期间我还发现一个规律:业务方真正在意的不是某个公式细节,而是自己的话语权有没有被尊重。让他们参与定义过程,他们才会认账。标准化推进者要做的是组织评审、记录结论、监督执行,而不是替业务方写指标定义。
5.3 老系统的存量数据如何过渡
旧系统里堆了几年脏数据,直接改源系统不现实,尤其是那些还在运行的老旧系统,谁也不愿意动。我的过渡方案很简单,也很实用:在数据仓库侧做一层“翻译映射”。
具体做法是:在采集层之后、数仓明细层之前,加一个轻量的映射/转换步骤。读取旧系统的原始字段,按标准表结构做重新映射、类型转换、空值归一。目标层的表永远保持标准结构,旧系统那边的脏数据被隔离在外面。等旧系统哪天改造完毕,再把这层映射摘掉。这种“先定目标、再做过渡”的方式,比逼着业务方改造旧系统柔软得多,落地阻力也小得多。
5.4 团队能力短板与学习路线建议
最后聊一下团队能力建设,因为标准化的推进永远需要人来做。
如果你是公司的数据标准化负责人,可能需要培养团队的几个核心技能:数据建模能力(特别是维度建模)、SQL 和数据清洗能力、平台运维与数据调度能力。如果是刚入行的新人,我建议的大数据学习路线,先不要一上来就啃底层源码和复杂的分布式理论,而是先把 Hadoop 生态的技术栈走通——用 Hive 做离线清洗、用 Spark 做数据加工、用 Flink 做实时处理,再配合 Flask 和 ECharts 做数据可视化分析页面。把一条完整链路跑通,比背 100 个面试题都管用。
练手的时候,找那些贴近真实业务场景的项目最容易长经验,比如网约车大数据的综合项目、电商数据分析项目,这类项目会逼着你面对真实数据里的空值、重复值、口径不一致问题,处理完一轮之后,你对标准化和数据质量检查框架的理解深度会完全不一样。有时间的话也可以参加一些大数据竞赛,拿到真实赛道脱敏数据,你会发现在限时场景下,“边分析边保证质量”才是最有价值的本事。
我在实践中还坚持一条:每个标准化项目结束时,强制要求参与的同学写一份“踩坑记录”。这些记录包括遇到什么数据问题、怎么定位的、当时的规则为什么没有拦住、后续要怎么补规则。久而久之,它就是团队自己的数据质量案例库,比任何外部培训都管用。
标准化这件事,做得越早,后面的账越少。有些团队总想着等技术平台完善了再回头搞标准化,结果平台迭代越快,数据越乱,最后收拾起来要付出的代价也越大。从我经验看,不如新项目一开始,就把那三条最小标准的挡板立起来,宁可慢一点,也要让每一批进入数仓的数据,从第一天起就是干净、可识别、可追溯的。