• Hive 数据模型切换后的数据验证方案


      记录这样一个场景,cdp/dmp等等标签模型系统,会出现这样一种情况。

      标签系统一般属于ads集市层加工的模型数据,如果上游(数仓/业务)表进行了切换,比如我们项目最近上游从fdl/gdl切换到了dwd/dws,切换完毕后的数据一般都会出现问题,如何进行数据验证是一个需要好好思考的问题。

      首先,如果把切换后的结果表当成左表去匹配切换前的结果表,很容易出现因未验证语法不正确导致的数据验证问题,例如:切换后的左表a中某个数据为null,而切换前的表b中数据不为null,反正亦是,这样的数据对业务来说也是有问题的。

      记录切换后验证方案:

    1、主键/外键 完整性检验:

      主键泛指数据表中的唯一键值,虽然在hive中不需要指定主键,但ads层的标签模型数据一般会接入到系统,一般系统都会对数据唯一性做要求,所以我们在hive中也尽量保证数据的唯一性。

      这里以user_id为例

      首先检验user_id的空值异常,检测有无null或者空的情况,这种都属于不该出现的异常数据

      其次检验user_id的重复值异常,如果是标签模型,一个用户应该只存在一条数据

      外键一般是数据接入系统,系统规定的外键,例如合同维度的数据表,系统也会要求用户id作为外键,所以外键也是需要进行检测

      检测外键完整性即保证合同号不为空的情况下,user_id也不为空。

    2、数据量检验:

      模型切换前与模型切换后的数据量进行对比,并给出差异原因。

    3、按主键进行的字段一致性检验:

      字段检验是数据验证的核心,是最关键的一部分。

      为了解决上述的问题,最好用的检验sql为:

      

    1. select * from (
    2. select contr_no
    3. ,user_id
    4. ,unique_id
    5. ,if_open_cooperator
    6. from test.a
    7. where dt='20220908'
    8. ) a
    9. join (
    10. select contra_no
    11. ,usr_id
    12. ,prod_cd
    13. ,if_open_cooperator
    14. from test.b
    15. where dt='20220908'
    16. ) b
    17. on a.contr_no=b.contra_no
    18. where (
    19. coalesce(a.if_open_cooperator,'')!=coalesce(b.if_open_cooperator,'')
    20. )
    21. ;

  • 相关阅读:
    Elasticsearch系列之:Centos7安装部署Elasticsearch详细步骤
    微信小程序:CC通用成绩查询小程序
    C++入门
    裸机程序--时间片调度
    怎么安装一个简单的vue3.0框架。整个流程.::
    lotus 1.16.0 最小快照导出 导入
    【无标题】
    C/C++:[Error] ld returned 1 exit status 解决方案
    【第二十一讲】参数解析器
    Spring-bean
  • 原文地址:https://blog.csdn.net/qq_40771567/article/details/126867452