数据质量规则到底怎么设计?六类规则从入门到落地全拆解

零门槛、免安装!海量模板方案,点击即可,在线试用!

免费试用

数据质量规则到底怎么设计?六类规则从入门到落地全拆解

阅读人数:103预计阅读时长:7 min

数据质量是一个说起来人人重视、但真正落地的时候往往只做了一半的事。常见的情况是:数据治理项目启动了,元数据也梳理了,数据目录也建了,但一到质量规则这里就停了——因为没人说得清"规则到底该怎么设计",靠业务部门提需求,提出来的往往是"数据要准确""数据要完整"这种没办法落地的描述。

这篇文章想把数据质量规则的设计方法讲清楚,从最基础的非空、唯一,到范围约束、格式校验,再到跨表一致性和业务逻辑规则,每种规则是什么、适合什么场景、怎么设计、常见的坑在哪里,逐类拆解。

数据质量规则到底在解决什么问题

先说一个认知前提:数据质量规则不是为了发现谁犯了错,而是为了让问题可发现、可量化、可追踪。

没有规则之前,数据质量问题靠人发现——分析师做报表发现数字对不上,财务对账发现有笔流水没入账,运营发现某个维度的数据突然全是空。这种发现方式的问题是:滞后、随机、不系统,而且同一个问题可能一再重复出现,因为没有机制去识别和拦截。

设计质量规则,是把这个"靠人发现"的过程变成"靠系统检测"——明确定义什么是正常的,什么是异常的,超出边界就触发告警、记录日志、通知处理。

规则的质量,决定了质量管理的有效性。规则设计得太宽,问题漏掉;设计得太严,误报满天飞,最后大家对告警麻木,质量管理形同虚设。

第一类:完整性规则(非空检查)

这是最基础的一类规则,检查字段是否存在值。设计非空规则的时候,有两个问题需要先想清楚:

1、哪些字段是业务上必须有值的? 不是所有字段都要求非空,设计规则之前要先判断字段的业务含义。比如"收货地址"在 B 端企业客户场景可能不是必填项,但在物流配送场景就是关键字段,不能为空。这个判断依赖业务访谈,不能只靠看表结构。

2、空值和 NULL 是一回事吗? 在很多系统里,空字符串和 NULL 是不同的存储状态,但业务含义可能是一样的——"没有填"。规则设计时需要明确,是只检查 NULL,还是把空字符串、"无"、"/"、"N/A"这类填充值也纳入检查范围。线上系统把这类值写进来的情况很常见,如果规则只检查 NULL,很多实质上的空值会被漏掉。

比如用 FineDataLink 的数据检测模块,非空规则可以自定义配置,支持把空字符串、"无"、"/"这类"伪非空"情况统一纳入检测范围。配置完成后设置定期检测计划,系统按频率自动跑,不需要人工手动触发。如果这个字段的检测逻辑在多张表里都要复用,也可以通过全局清洗规则统一处理,不用每张表单独配一遍。

第二类:唯一性规则(重复值检查)

唯一性规则用来检查某个字段或字段组合是否存在重复,最典型的场景是主键重复。

单字段唯一 vs 联合唯一

主键通常是单字段唯一,但业务上有很多联合唯一的场景——比如"同一个用户在同一天只能有一条汇总记录",这时候需要把用户 ID 和日期作为联合唯一约束来检查,而不是只看单个字段是否重复。

重复的来源

数据重复通常有几个来源:

  • 多个系统同步到同一个目标表,没有做去重处理;
  • 增量同步逻辑有问题,同一条记录被多次写入;
  • 业务系统本身允许重复(比如日志类数据),但下游分析需要去重。

规则设计的时候要结合数据来源判断,重复是不应该出现的问题,还是上游系统本来就会产生、需要在加工层处理。这两种情况的处理方式完全不同。

还可以用 FineDataLink 做数据同步时,支持配置主键冲突策略——遇到重复主键是报错、跳过还是覆盖,可以根据业务场景选择。对于分析类数据,在同步完成后可以加一步唯一性校验任务,检查目标表是否引入了重复数据,把问题卡在数据流转环节,不让它流到下游。

第三类:范围和格式规则

这两类规则用来检查字段值是否在合理范围内,以及格式是否符合预期。

数值范围规则

最常见的场景:金额不能为负数、折扣率不能超过 1、年龄不能超过 150、库存数量不能小于 0。

设计范围规则时需要区分两种情况:硬边界和软边界。硬边界是业务上绝对不可能出现的值,比如折扣率大于 1——这种直接报错,数据不能入库。软边界是统计上异常但业务上有可能出现的值,比如某笔采购金额比历史平均高出 10 倍——这种用告警处理,拦截下来让人工确认,而不是直接拒绝入库。

格式规则

格式规则检查的是字段的表达形式:日期格式是否统一("2024-01-01"还是"20240101"还是"2024/01/01"),手机号是否符合规则,邮箱格式是否有效,编码是否符合约定的位数和字符规范。

格式问题在多系统集成的场景里非常常见——A 系统日期用"YYYY-MM-DD",B 系统用"YYYYMMDD",合并到一张表里之后格式混乱,直接影响后续的关联查询和时间序列分析。

FineDataLink 在处理多源数据集成时,字段类型映射和格式转换是标准能力,可以在数据流转过程中把不同系统的格式统一成目标库要求的格式,而不是等数据进去之后再做清洗。

对于大量表、大量字段都存在同类格式问题的情况,FineDataLink 的全局清洗规则可以集中处理——统一配置值匹配和替换逻辑,一次性覆盖所有来源表,不用每张表单独写转换逻辑。如果源表里有手机号、身份证号、金额等敏感字段,也可以在全局清洗规则里统一配置脱敏或加密策略,输出到下游时自动处理,不需要在每个同步任务里单独加脱敏步骤。

第四类:枚举值规则

枚举值规则检查的是字段的值是否在预定义的合法值域内。

比如"订单状态"字段只能是"待支付、已支付、已发货、已完成、已取消"这几个值;"性别"字段只能是"男、女、未知";"客户等级"只能是"A、B、C、D"。

枚举值规则的维护成本

这类规则设计起来简单,但维护成本容易被低估。业务变化的时候,枚举值也会变——新增了一个订单状态,但规则里没有及时更新,新状态的数据都被标记成异常。这种情况在企业里非常普遍,规则库不跟业务同步更新,质量检测结果就逐渐失去可信度。

建议枚举值规则和业务系统的字典表保持联动,而不是在规则里硬编码值域。当字典表更新时,规则自动生效,减少人工维护的遗漏。

第五类:跨表一致性规则

这是规则设计里最复杂、也最容易被忽略的一类——检查不同表之间的数据是否一致、是否关联完整。几种典型场景:

引用完整性: 明细表里的外键,在主表里必须有对应记录。比如销售明细表里的客户 ID,在客户主表里必须存在;订单明细表里的商品编码,在商品主表里必须能查到。如果主表没有对应记录,说明数据在同步或加工过程中出了问题。

汇总一致性: 明细数据汇总之后,应该和汇总表里的数字对得上。比如每日销售明细按日汇总,应该等于日汇总表里对应日期的金额。这类规则在数仓分层结构里很重要——ODS 层数据汇总后进 DWD,再汇总进 DWS,如果某一层的汇总数字对不上,说明有明细数据丢失或者加工逻辑有问题。

跨系统一致性: 同一个业务对象在两个系统里都有记录,两边的关键字段应该一致。比如 ERP 里的采购金额和财务系统里的应付金额,理论上应该能对上,差异超出阈值就需要排查原因。

时序一致性: 有些字段在时间上有逻辑约束,比如订单创建时间不能晚于订单支付时间,合同生效日期不能晚于合同签订日期。时序规则经常被遗漏,但一旦违反,往往意味着数据在录入或同步过程中出了问题。

跨表规则的挑战在于执行效率

单表规则可以在字段级别快速扫描,跨表规则需要关联查询,数据量大的时候性能压力很大。工程上的解法是:高频执行的跨表规则优先轻量设计,用统计抽样或增量范围代替全表扫描;全量一致性校验放在低峰期定期执行;对于特别关键的核对逻辑,单独设计对账任务而不是混在常规质量规则里。

实际落地时,可以把检测直接嵌进数据生产流程。比如在 FineDataLink 中,可以把记录数核对、主键完整性、金额汇总等跨表检测配置到数据检测环节,再和定时任务串在一起。这样同步或加工任务完成以后,检测可以紧接着执行,不需要再另外维护一套独立的校验流程。

放到数仓分层里,这种方式会更直观:

  • ODS 同步完成 → 做一次完整性检测
  • DWD 加工完成 → 做一次明细一致性检测
  • DWS 汇总完成 → 再做一次汇总结果核对

这样做的价值,不只是"多做了几次检查"。更重要的是:问题尽量在哪一层产生,就在哪一层被发现。否则 ODS 少了一批数据,DWD 继续加工,DWS 再继续汇总,最后等到 BI 报表数字不对时再倒着查,排查成本会高很多。

所以数据质量真正成熟以后,应该从"出了问题以后再查",逐渐变成"数据每经过一个关键节点,就验证一次"。

免费试用

还有一类问题,单纯靠规则本身很难解决:发现数字不对以后,到底是哪一步出了问题?这时候,数据链路的上下游关系就很重要。如果一张 DWS 汇总表数字异常,需要知道它来自哪些明细表,中间经过了哪些任务,又依赖哪些源数据。

在 FineDataLink 中,可以结合血缘关系查看表、任务等对象之间的上下游依赖。排查时不必从几十个同步和加工任务里一个个翻,而是可以顺着链路往上追:当前结果 ← 加工任务 ← 上游明细表 ← 源系统。

这样跨表质量管理就不再只是"发现不一致",而是逐渐形成一条完整链路:规则发现问题 → 定位异常数据 → 顺着血缘追上游 → 找到问题环节 → 修复后重新验证。

这也是跨表质量规则真正有价值的地方。它不是为了多加几条校验,而是为了让数据在流向下游之前,尽可能把问题卡在产生的位置。

第六类:业务逻辑规则

业务逻辑规则是最贴近实际业务的一类,它描述的不是数据格式或统计特征,而是业务上的约束关系。几个典型例子:

  • 已发货订单,发货时间不能为空;
  • 退款金额不能超过原始订单金额;
  • 同一合同的累计付款金额不能超过合同总价;
  • 库存余额不能小于零(除非允许超卖);
  • 员工离职日期不能早于入职日期。

这类规则完全依赖对业务的理解,技术人员很难自己设计出来,必须和业务部门一起梳理。实践中的一个有效方法是:把历史上出现过的数据问题整理成规则。每一次数据异常,如果能在事后提炼出一条可自动检测的规则,就能防止同类问题下次再发生。

规则设计的几个通用原则

讲完各类规则之后,说几个工程上的通用原则。

先分级,再设计。 不是所有规则违反都要同等对待。规则应该分级:严重(数据不能入库)、警告(入库但标记异常)、提示(记录在案,定期复盘)。设计规则时先明确每条规则的处置方式,不要一律报错——否则规则越来越多,一跑就是一堆错误,最后没人看。

规则要能量化。 "数据要完整"不是规则,"字段 X 的非空率不低于 99%"才是规则。规则必须有可测量的阈值,才能跟踪趋势、设置告警、评估改善效果。

规则要有责任人。 每条规则异常触发之后,谁来处理、处理时限是多久,这些需要在规则设计时就定下来,而不是等告警发出来之后再找人。没有责任人的规则,告警发出去之后往往石沉大海。

规则要定期复盘。 业务变化、数据结构变化,规则也需要随之更新。建议每季度或每半年对规则库做一次复盘,把误报率高的规则调整阈值,把已经不再适用的规则下线,把新出现的数据问题补充进去。

实际做数据质量管理时,更建议把"发现问题"和"定位问题"尽量放在同一条链路里。在 FineDataLink 里,这几个能力组合起来就比较实用。

比如先通过数据检测配置质量规则和定期检测任务,持续观察哪些规则出现异常。异常结果可以留存下来,时间拉长以后,还能看出哪些规则的问题越来越多,而不是只看到某一次检测有没有通过。

当某条规则触发以后,下一步通常不是立刻改数据,而是先确认问题。这时候可以直接进入库表管理查看对应表的数据和结构,检查字段值、数据量和具体明细;如果默认查看还不够,也可以继续用 SQL 查询,把异常范围进一步缩小。也就是说,很多原本需要重新连数据库才能完成的排查,可以直接在当前链路里继续往下做。

如果确认数据确实有问题,接下来就要继续追:问题到底是这一张表本身产生的,还是从上游某个同步、加工环节带下来的?这时候再结合血缘分析查看上下游依赖关系,会比人工翻任务日志高效很多。从当前异常表往上追,可以逐步看到它依赖了哪些上游数据、经过了哪些加工任务,再去判断问题究竟在哪个节点开始出现。

数据质量规则和数据治理的关系

最后说一个容易混淆的问题:数据质量规则是数据治理的一部分,但不是全部。

数据治理还包括数据标准(字段命名、编码规范、口径定义)、元数据管理(数据在哪里、什么含义、来自哪里)、数据血缘(数据怎么流转、谁依赖谁)、主数据管理(客户、组织、产品等核心对象的唯一版本)。

质量规则是在数据已经有了标准定义之后,用来检测数据是否符合这些标准的机制。如果标准没有定义清楚,规则就没有设计的依据;如果规则不执行,标准就只停留在文档里。两者缺一不可,但执行顺序是有的:先把核心字段的业务含义和口径定义清楚,再设计对应的质量规则,否则规则检测的可能是错误的标准。

小结

数据质量规则的设计,是一个从业务出发、逐层落地的过程:

  • 非空和唯一是基础,要结合字段的业务含义来设计,不是所有字段都要求非空;
  • 范围和格式解决的是"值虽然有,但不合理"的问题,要区分硬边界和软边界;
  • 枚举值规则要注意维护成本,和字典表联动而不是硬编码;
  • 跨表一致性是最有价值但也最复杂的一类,要兼顾检测深度和执行效率;
  • 业务逻辑规则靠业务来提,最有效的来源是历史上真实发生过的数据问题。

规则设计完不等于质量管理到位,规则执行、异常处理、责任闭环和持续维护,才是质量管理真正起作用的地方。

【AI声明】本文内容通过大模型匹配关键字智能生成,仅供参考,帆软不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系blog@fanruan.com进行反馈,帆软收到您的反馈后将及时答复和处理。

若想了解更多关于FineDataLink的相关信息,您可以访问下方链接,或点击下方组件,快速获得帆软为您提供的企业大数据分析平台建设建议、免费的FineDataLink试用和同行业自助智能分析标杆案例学习参考。

了解更多FineDataLink信息:www.finedatalink.com

帆软FineDataLink数据集成平台在线试用!

免费下载

评论区

暂无评论
帆软企业数字化建设产品推荐
报表开发平台免费试用
自助式BI分析免费试用
数据可视化大屏免费试用
数据集成平台免费试用