先抛出几个问题
存储是不是基石?
假如存储不挂,数据真的准确吗?
存储挂了,数据还准确吗?
如何校验是否正确?如何让其正确?机制是不是必须有?
注:sqoop
抽数据,无error
丢数据的概率很小
数据质量校验:数据量校验 count
相同吗?count
相同内容相同吗?
数据量相同–>数据量不同 重刷机制 补or删 spark
95%–>数据内容不同? 抽样 5%
现在重点理解一下重刷机制
背景:用count
校验上下游的数据不准确
引入重刷机制:通过对上下游的两个表求full outer join
来对比字段的null
值
上游表a
| id | data | age | |
下游表b
| id | data | age | |
我们发现表 a 和表 b 对比 表 a 少了 5 、6 多了 7 ,表 b 少了 2 、 7 多了 6,我们现在对两个表做 full outer join
| aid | data | age | bid | |
以表 a 为标准,对生成后的大表做筛选,分别查找 aid
和 bid
为 null
的记录
select from t where aid=null |
发现 bid
为 5 、 6 的行 aid
为 null
,说明 bid
下游数据多了,根据 bid
重新构建
delete from b where bid=5 |
发现 aid
为 2 、 7 的 bid
为null
,说明 bid
下游数据少了,根据 aid
重新构建
insert into 2 ruoze2 19 |
经过重新构建也就是重刷后的数据是
| aid | data | age | bid | |
深度思考:
full outer join
其实就是先 left join
和后 right join
的两个结果,为 null
的刚好是缺少的或者多的,而交集是上下游都有的数据,需要做的是 left join
为 null
做 insert
或者 delete
,还是 right join
为 null 做 insert
或者 delete
。