数据仓库——数据重刷机制

数据仓库——数据重刷机制,第1张

数据仓库——数据重刷机制

数据重刷机制背景:

在大数据处理、分析中存储一直都是基石,但是有一个问题是即使存储不挂,数据也不一定就是准确的;如果存储挂了,数据一定不准确,此时就需要校验数据是否正确,并且将数据修改正确正确的机制。

注:

常用的组件sqoop抽数据,无error丢数据的概率很小

数据质量校验:

需要注意数据量校验分成令部分校验count是否相同,在count相同的基础上查看内容是否相同。
数据量相同
数据量不同时启动重刷机制判断补或者删使用spark比较多
通过抽样5%来判断,数据内容是否相同

数据重刷机制:

如果发现用count校验上下游的数据不准确:
引入重刷机制:
通过对上下游的两个表求full outer join来对比字段的null值

上游表a mysql 所有的字段拥有主键 a表

1
2
3
4
1   d1   18
2   d2   19
3   d3   20
7   d7   22

下游表b phoenix 拥有主键 b表

1
2
3
4
1   d1   18
3   d3   19
5   d5   20
6   d6   21

有可能是还没来得及同步到下游,没有来得及删或者其他bug造成的。此时表a和表b对比表a少了5、6多了7,表b少了2、7多了6

对两个表做full outer join 成为新表t

1
2
3
4
5
6
7
aid                  bid
1     d1     18     1
2     d2     19     null
3     d3     20     3
7     d7     22     null 
null   null    null    5
null   null    null    6

以表a为标准,对生成后的大表做筛选,查找aid为null的记录

1
select * from t where aid=null

发现bid为5、6的行aid为null,说明bid下游数据多了,根据bid重新构建

1
2
delete from b where bid=5
delete from b where bid=6

以表a为标准,对生成后的大表做筛选,查找bid为null的记录

1
select * f rom t where bid=null

发现aid为2、7的bid为null,说明bid下游数据少了,根据aid重新构建

1
2
insert into 2 d2 19 
insert into 7 d7 22

最重经过重新构建、重刷后的数据是

1
2
3
4
5
aid           bid
1   d1   18   1
2   d2   19   2
3   d3   20   3
7   d7   22   7

注意:

full outer join其实就是先left join,后right join的两个结果,为null的刚好是缺少的或者多的,而交集是上下游都有的数据,需要做的是left join为null做insert或者delete,还是right join为null做insert或者delete *** 作。

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5656121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存