数据重刷机制背景:
在大数据处理、分析中存储一直都是基石,但是有一个问题是即使存储不挂,数据也不一定就是准确的;如果存储挂了,数据一定不准确,此时就需要校验数据是否正确,并且将数据修改正确正确的机制。
注:
常用的组件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 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)