先抛出几个问题
1. 存储是不是基石?
2. 假如存储不挂,数据真的准确吗?
3. 存储挂了,数据还准确吗?
4. 如何校验是否正确?如何让其正确?机制是不是必须有?
注:sqoop抽数据,无error丢数据的概率很小
数据质量校验:数据量校验 count相同吗?count相同内容相同吗?
数据量相同-->数据量不同 重刷机制 补or删 spark 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 为标准,对生成后的大表做筛选,分别查找 aid 和 bid 为 null 的记录
select from t where aid=null select from t where bid=null
发现 bid 为 5 和 6 的行 aid 为 null,说明 bid 下游数据多了,根据 bid 重新构建
delete from b where bid=5 delete from b where bid=6
发现 aid 为 2 和 7 的 bid 为 null,说明 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 为 null 做 insert 或者 delete。