数据仓库_重刷机制(抛砖引玉)

[亡魂溺海] 提交于 2019-12-24 18:58:58

先抛出几个问题

1. 存储是不是基石?

2. 假如存储不挂,数据真的准确吗?

3. 存储挂了,数据还准确吗?

4. 如何校验是否正确?如何让其正确?机制是不是必须有?

注:sqoop抽数据,无error丢数据的概率很小

数据质量校验:数据量校验 count相同吗?count相同内容相同吗?

数据量相同-->数据量不同 重刷机制 补orspark 95%-->数据内容不同? 抽样 5%

 

现在重点理解一下重刷机制

背景:用count校验上下游的数据不准确

引入重刷机制:通过对上下游的两个表求full outer join来对比字段的null

上游表a

1 data1 18
2 data2 19
3 data3 20
7 data7 22

下游表b

1 data1 18
3 data3 19    
5 data5 20
6 data6 21

我们发现表 a 和表 b 对比 表 a 少了 5 和 6 多了 7 ,表 b 少了 2 和 7 多了 6,我们现在对两个表做 full outer join

aid                 bid
1     ruoze1  18     1
2     ruoze2  19     null
3     ruoze3  20     3
7     ruoze7  22     null 
null  null    null   5
null  null    null   6 

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

select from t where aid=null 

select from t where bid=null 

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

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

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

insert into 2 ruoze2 19 
insert into 7 ruoze7 22 

经过重新构建也就是重刷后的数据是

aid           bid
1 ruoze1 18   1
2 ruoze2 19   2
3 ruoze3 20   3
7 ruoze7 22   7

深度思考:

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!