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为:

  

select * from (
    select contr_no
    ,user_id
    ,unique_id
    ,if_open_cooperator
    from test.a
    where dt='20220908'
) a
join (
    select contra_no
    ,usr_id
    ,prod_cd
    ,if_open_cooperator
    from test.b
    where dt='20220908'
) b
on a.contr_no=b.contra_no
where (
    coalesce(a.if_open_cooperator,'')!=coalesce(b.if_open_cooperator,'')
)
;

你可能感兴趣的:(Hive,hive)