数据校验基础:从概念到实战
各位同学好,我是老张。今天咱们聊聊数据校验的基础。说实话,我见过太多项目在数据质量上栽跟头,根源往往就是——校验没做到位。你想想看,数据从产生到消费,中间经过多少环节?每个环节都可能出问题。所以,理解校验的本质,是做好数据质量保障的第一步。
什么是数据校验?
数据校验,说白了就是检查数据是否符合预期规则。比如年龄字段不能是负数、邮箱格式必须包含@符号、订单金额不能为空……这些都是校验。
我个人习惯把校验看作一道安检门。数据进来时,先过一遍安检,不合格的直接拦下,或者标记出来。这样下游系统就不会被脏数据污染。
核心定义:数据校验是依据预定义的规则、约束或模式,对数据的完整性、准确性、一致性和合规性进行检查的过程。
校验 vs 验证:别再傻傻分不清
很多同学问我:“张哥,校验和验证到底有啥区别?”嗯,这个问题确实容易混淆。我刚开始做数据工作时也搞混过,直到有一次在项目评审会上被架构师问住……从那以后我就彻底分清了。
| 维度 | 校验(Validation) | 验证(Verification) |
|---|---|---|
| 关注点 | 数据是否符合业务规则 | 数据是否被正确转换/处理 |
| 典型问题 | 年龄是否在0-150之间? | ETL脚本是否把日期格式转对了? |
| 检查对象 | 数据本身 | 数据处理过程 |
| 时机 | 数据产生或入库时 | 数据加工或迁移后 |
| 类比 | 检查快递包裹里的东西对不对 | 检查快递运输路线有没有走错 |
举个例子你就明白了。假设用户注册时填了生日字段:
- 校验:检查生日格式是不是YYYY-MM-DD,日期是不是合理(比如不是未来日期)
- 验证:检查ETL程序有没有把生日字段从字符串正确转成日期类型
两者相辅相成,缺一不可。我见过不少团队只做校验不做验证,结果数据格式对了但内容全乱套——那更可怕。
校验的时机:三个关键节点
数据校验不是只在最后做一次就完事了。我个人习惯把校验时机分成三个层次,就像安检一样——入口查一次、途中查一次、出口再查一次。
1. 源头校验
数据刚产生时就要校验。这是成本最低、效果最好的方式。我在项目中遇到过,业务系统直接往数据库里写脏数据,下游数仓怎么清洗都洗不干净。后来我们强制在API入口层做校验,问题直接减少80%。
实战建议:源头校验最好在数据采集层完成。比如用JSON Schema校验接口入参,或者在消息队列的Producer端做格式检查。
2. 过程校验
数据在流转、加工过程中也要校验。你想想看,ETL跑了一晚上,结果某个字段因为类型转换失败全变成NULL了——这种坑我踩过不止一次。
过程校验通常包括:
- 数据量级变化监控(比如昨天100万行,今天突然变成10万行)
- 关键字段空值率检查
- 数据分布合理性判断
3. 输出校验
数据交付给下游前,做最终检查。这就像发货前的质检。输出校验通常比较严格,因为数据一旦出去,再想追回来就难了。
避坑指南:我曾经在一个实时数仓项目里,只做了源头校验,忽略了输出校验。结果某天源系统改了字段长度,数据截断后直接写入报表,导致业务决策偏差。从那以后,我坚持三层校验都要做。
校验的粒度:从字段到表
校验粒度决定了你检查的精细程度。我一般把它分成三个层次:
1. 字段级校验
最基础的校验,针对单个字段。比如:
- 非空检查(NOT NULL)
- 数据类型检查(INT、VARCHAR等)
- 值域检查(年龄0-150、性别只能是男/女/未知)
- 格式检查(手机号11位、邮箱包含@)
- 唯一性检查(主键、身份证号)
-- 字段级校验示例:检查订单金额是否合法
SELECT order_id, amount
FROM orders
WHERE amount IS NULL
OR amount <= 0
OR amount > 1000000; -- 超出合理范围
2. 记录级校验
检查单条记录内多个字段之间的关系。比如:
- 开始日期必须早于结束日期
- 订单总金额 = 商品单价 × 数量 + 运费
- 身份证号与出生日期逻辑一致
-- 记录级校验示例:检查日期逻辑
SELECT order_id, start_date, end_date
FROM orders
WHERE start_date > end_date; -- 逻辑错误
3. 表级校验
检查整个表或表间关系。比如:
- 主键唯一性
- 外键引用完整性
- 数据量级波动是否在合理范围
- 汇总数据与明细数据是否一致
-- 表级校验示例:检查外键引用完整性
SELECT o.order_id
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
WHERE c.customer_id IS NULL; -- 找不到对应客户
经验之谈:三个粒度的校验要配合使用。字段级校验抓基础问题,记录级校验抓逻辑问题,表级校验抓整体问题。我一般建议先做字段级,再做记录级,最后做表级——这样效率最高。
知识体系总览
下面这张图把本章的核心内容串起来了。你可以把它当作数据校验的全景地图:
小结
这一章我们聊了数据校验的核心概念。记住三个关键点:
- 校验是检查数据是否符合规则,验证是检查处理过程是否正确
- 校验时机分三层:源头、过程、输出,缺一不可
- 校验粒度分三级:字段级、记录级、表级,逐层递进