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

数据重刷机制背景:

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

注:

常用的组件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操作。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值