作为数据仓库工程师,模型开发完成后的验证核心是规范先行、全链路覆盖、业务闭环、持续监控,确保表的数据质量、性能、合规性完全符合设计与业务要求,以下是分阶段的详细验证步骤。

一、表结构与元数据规范性验证

基础中的基础,表结构不符合规范,后续数据验证均为无效工作,核心要求是与设计文档 100% 匹配,符合数仓规范。

  1. 基础元数据校验

    • 核对库名、表名、表注释:完全符合数仓命名规范(如dwd_主题域_数据域_表名_更新周期),表注释清晰标注业务含义、更新周期、更新频率、负责人、依赖来源。

    • 字段级全量校验:每个字段的字段名、数据类型、长度、精度、是否可为空、默认值、字段注释与设计完全一致;核心业务字段无注释、注释模糊直接不通过。

    • 合规字段校验:敏感字段(身份证、手机号、银行卡、地址等)按规范标注敏感等级,脱敏规则配置完成,符合数据安全合规要求。

  2. 分区 / 分桶 / 分布键验证

    • 分区规则校验:分区字段(如 dt、hour)、分区类型、分区粒度完全符合设计;无乱分区、空分区、非法分区值(如dt='9999-99-99')。

    • 分区生命周期校验:分区保留策略、冷热分离规则、归档配置完成,符合数仓生命周期管理规范。

    • 分布键 / 分桶校验:MPP 数据库(Greenplum/ClickHouse)的分布键 / 排序键、Hive/Spark 的分桶字段 / 桶数与设计一致,从根源规避后续数据倾斜和性能问题。

  3. 存储与属性校验

    确认存储格式(ORC/Parquet 等)、压缩算法(Snappy/ZSTD 等)、事务属性、TTL、索引配置、小文件合并规则完全符合数仓分层规范。

二、数据粒度校验

验证数据粒度是否与设计一致,比如用户粒度、订单粒度。有明确的业务主键。

主键与唯一约束验证

  • 主键非空校验:select count(*) from 表名 where 主键字段 is null;,结果必须为 0。

  • 主键唯一性校验:select 主键字段, count(*) cnt from 表名 group by 主键字段 having cnt > 1;,结果必须为空。

三、数据完整性验证

核心目标:确保数据不丢、不多、不缺,覆盖全链路数据流转的完整性。

  1. 行数与数据量校验

    • 全量表校验:对比源表经过过滤、清洗后的预期行数,与目标表实际行数,无过滤逻辑的必须 100% 一致,有过滤逻辑的差值必须在业务可接受范围内。

      示例 SQL:

      select '源表' as table_name,count(*) as cnt from 源表 where 过滤条件 
      union all 
      select '目标表' as table_name,count(*) as cnt from 目标表;
    • 增量表校验:核对增量时间窗口内的源表行数,与目标表对应分区的行数,确保无漏刷、重刷、多刷。

      示例 SQL:select dt,count(*) from 目标表 where dt between '起始日期' and '结束日期' group by dt order by dt;

    • 数据量校验:对比目标表单分区 / 全表的存储大小,与预期数据量匹配,无异常数据膨胀或压缩异常。

  2. 非空字段完整性校验

    设计要求非空的核心字段(业务主键、外键、维度字段、核心指标),必须无空值;可空字段的空值占比符合业务预期,无异常大面积空值(如维度字段 90% 为空,大概率是关联逻辑错误)。

    示例 SQL:select count(*) from 目标表 where 核心字段 is null;,核心字段校验结果必须为 0。

  3. 数据范围完整性校验

    • 分区覆盖校验:所有业务需要的分区均已生成,无缺失分区、未来分区、异常历史分区。

      示例 SQL:select distinct dt from 目标表 order by dt;

四、数据准确性验证(核心环节)

核心目标:确保数据算的对、完全符合业务口径,是整个验证流程的核心,直接决定表是否可上线。

  1. 指标口径一致性验证

    • 口径一致性校验:确保指标的统计维度、时间窗口、过滤条件、去重规则、聚合方式,与业务定义的口径完全一致,杜绝 “技术正确,业务错误”。

    • 与黄金基准对比:核心业务指标(GMV、订单量、用户数、留存率、营收等)必须与业务官方基准完全对齐,财务指标差异率≤0.01%,运营指标差异率≤0.1%。

  2. 计算逻辑单元测试

    • 测样样例覆盖全面:覆盖正常业务场景、边界场景、异常场景。

    • 逐字段对比:目标表中对应样本的实际结果,与计算逻辑输出的结果 100% 匹配,确保字段映射、枚举值范围、数据转换、格式清洗、公式计算、条件分支、空值替换、脱敏规则等所有加工逻辑完全正确。

  3. 幂等性验证

    • 幂等性校验:重复执行任务、重跑分区,目标表数据不会重复、丢失、错乱,重跑后结果与首次执行完全一致,确保insert overwrite/upsert逻辑正确。

五、数据一致性验证

核心目标:确保表与上下游全链路、跨表的数据对齐,无逻辑矛盾。

  1. 指标上下游一致性校验

    • 端到端链路核对:从 ODS 源表 ->DWD 明细层 ->DWS 汇总层 ->APP(ADS) 应用层,全链路核心指标必须层层对齐,无数据丢失、无逻辑断层。

      示例:DWD 层订单明细 sum (订单金额) = ODS 层订单表过滤后 sum (订单金额) = DWS 层日维度汇总 sum (订单金额) = APP 层报表 GMV。

  2. 指标跨表一致性校验

    • 同口径跨表对齐:不同表中的相同指标必须一致。比如最近一周的活跃用户数,不同链路构建的数据模型进行计算时指标值应该一致,如果口径存在差异,指标的差异值应该符合业务预期。

  3. 维度一致性校验

    • 维度一致性校验:事实表中退化的维度属性,与维度表对应属性完全一致;缓慢变化维(SCD)逻辑正确,历史快照数据与事实表时间维度匹配,无维度属性错乱。

  4. 增量与全量一致性校验

    • 增量累计值与全量值对齐:每日增量数据的累加值,与全量表的累计值完全一致,无增量漏算、重算。

六、数据及时性验证

  • 验证数据延迟与源系统对比,确认数据延迟是否在合理范围内

  • 验证模型产出时间​​:根据调度时效,验证关键表是否在约定时间内完成(如7:00前产出)

七、性能与可用性验证

核心目标:确保表好用、稳定、符合 SLA 要求,避免上线后出现慢查询、任务超时、集群压力过大等问题。

  1. 写入性能验证

    • 任务执行时间:全量、增量任务的执行时间符合 SLA 要求,无超时风险,确保在业务窗口期内完成。

    • 数据倾斜排查:检查任务执行日志,确认 join、group by 等操作无数据倾斜,无单个 Task 执行时间过长的问题。

    • 小文件治理:验证小文件合并规则生效,目标表的小文件数量符合集群规范,避免 NameNode 压力过大、查询性能下降。

  2. 查询性能验证

    针对业务方常用的查询 SQL(按分区查询、维度过滤、聚合统计、关联查询),验证执行时间符合预期,无全表扫描,分区裁剪、索引、分布键生效;大时间范围、多维度聚合的极端查询,无内存溢出、查询超时问题。

  3. 可用性与权限验证

    • 权限校验:下游使用权限配置正确,无权限不足 / 过大问题;敏感字段的脱敏、行级 / 列级权限控制生效。

    • 高可用验证:任务失败重试、重跑、回滚逻辑正确,集群故障恢复后,任务能正常重跑,数据不丢失。

    • 存储可用性:表的存储大小、压缩比符合预期,生命周期规则生效,避免存储成本超标。

八、文档沉淀

核心目标:完成业务闭环,确保表符合业务需求,可追溯、可维护。

文档沉淀与知识同步

  • 输出完整验证报告:包含表结构说明、验证用例、验证结果、核心指标对比、异常问题与解决方案、性能测试结果。

  • 更新数仓文档:完善表设计文档、使用手册,确保文档与实际表完全一致。

  • 同步上下游:向上下游开发、业务方同步表的上线时间、使用方法、注意事项、口径变更,避免下游误用。


数仓表验证核心红线(严禁触碰)

  1. 无业务验收、无幂等性的表,严禁上线生产。

  2. 核心指标与业务基准差异超阈值、存在主键重复 / 核心字段空值的表,严禁上线生产。

  3. 存在严重数据倾斜、性能不符合 SLA 要求的表,严禁上线生产。

  4. 敏感数据未脱敏、不符合合规要求的表,严禁上线生产。