记录这样一个场景,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,'')
)
;