SparkSQL溯源工具

这是一个能够透视Spark SQL执行结果,找出每一行数据源头的工具。借助Spark计算引擎完成结果数据的溯源功能。

当需要验证结果数据准确性的时候,通常会如何处理?
首先要保证数据处理逻辑的准确性,其次需要原始数据的准确性和一致性
数据处理逻辑是的准确性我们可以通过标准数据集的方式来验证,
所以大部分的数据准确性问题都来源于原始数据。那么怎么找到原始数据的来源?

1。梳理SQL的逻辑,整理引用数据的范围和关联关系
2。在结果集里挑几个能作为特征的字段,定位关联的原始数据
3。逐步重现计算过程来验证数据的结果的准确性。

但遇到以下情况是,上面描述的方法就显得无能为力了。

1. 原始数据无主键,结果也没找到明显的特征字段
2. 结果数据被脱敏加密,无法逆向运算
3. 结果数据生产的现场随着原始数据的更新而不可重现。
4. 结果数据是汇总的数据,需要多次聚合大量原始数据才能得到结果。
5. 表于表之间是弱的关联关系,表现为:
i ): 多表之间只有笛卡尔积通过去重复和过滤条件的到需要的结果。
ii):表不是直接的字段关联,而是通过计算后的字段关联。
6. 结果数据来源与某个大字段的解析结果,如从xml,json展开的结果;甚至与解析的中间结果再关联。

遇到这些情况使用传统的方法要么考验分析人员的分析能力,要么占用大量计算资源,不断数据碰撞和重试。

SparkSQL溯源工具就是为了解决这个问题开发的。这里用一个年级总分前3名的SQL来演示工具的使用,SQL中使用了子查询,窗口函数,聚合函数等处理方式


select tab1.id, tab1.name, tab1.grade , tab1.scores, tab1.grade_rank as grade_rank from ( select t1.id,t1.name,t1.grade, sum(t2.scores) as scores, ( row_number() over (partition by t1.grade order by sum(t2.scores) desc) ) as grade_rank from student t1 left join score t2 on t1.id = t2.student_id and t2.type = '期末' group by t1.id,t1.name,t1.grade ) tab1 where tab1.grade_rank <= 3

通过内置的trace命令就可以查看指定结果数据行的原始数据。(使用的数据都是随机生成的姓名,生产算法:采用常用的20个姓,和100个名字常用字,任何随机组合,没有现实意义)

工具的安装方法参考我的个人网站:http://sqllineage.com/doc?id=22
工具需要安装JDK和部署Spark环境,如果一时没有合适的环境,我的网站准备了一个演示的环境。初始化了了一个小的数据集的Spark环境,http://sqllineage.com/trace 提供了7条演示脚本,当然您可以根据自己的需求任意修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值