数仓字段血缘解析实现—hive版

 

本文大纲

1、字段血缘分析的意义

2、实现方案选择

3、实现过程

4、总结

 

字段血缘分析的意义

数仓经常会碰到的两类问题:

1、两个数据报表进行对比,结果差异很大,需要人工核对分析指标的维度信息,比如从头分析数据指标从哪里来,处理条件是什么,最后才能分析出问题原因       ——数据回溯问题

2、基础数据表因某种原因需要修改字段,需要评估其对数仓的影响,费时费力,然后在做方案        —— 影响分析问题

这两类问题都属于数据血缘分析问题,数据血缘分析还有其它的积极意义,比如:

  • 问题定位分析

    类似于影响分析,当程序运行出错时,可以方便找到问题的节点,并判断出问题的原因以及后续的影响

  • 指标波动分析

    当某个指标出现较大的波动时,可进行溯源分析,判断是由哪条数据发生变化所导致的

  • 数据体检

    判定系统和数据的健康情况,是否存在大量的冗余数据、无效数据、无来源数据、重复计算、系统资源浪费等问题

  • 数据评估

    通过血缘分析和元数据,可以从数据的集中度、分布、冗余度、数据热度、重要性等多角度进行评估分析,从而初步判断数据的价值

 

实现方案选择

经过调研,目前业界有一些优秀的框架,比如druid ,内部已经实现了大部分的解析功能,可以用来解析sql,但是它的缺点是支持mysql天衣无缝,但对hive sql却是有心无力,不能照顾到所有的语法,会导致有一部分sql不能很好的解析。

也有一些同学选择自己解析asttree来实现,但sql的语法千变万化,自己去解析难度还是很大的,尤其是一旦hive版本升级了,就得去关注新版本又更新了哪些语法,然后自己的代码也得跟进,很辛苦呀~~

 

我的想法是:利用hive内部解析的方法来解析sql,这样,凡是能在hive中执行的sql,都能够全面解析到字段依赖。

这个方法就要求我们 要对hive的解析过程非常了解,没关系呀,这个我完全擅长,通过对hive编译模块源码的透析,早已熟悉了各个模块在哪个数据结构里,掘地三尺,也是能把这些给挖出来的。

这个方法的主要难点就是该从什么地方切入呢,毕竟源码相关的,都是hive内部的结构,最好不要对源码做侵入性的修改。

在看源码时,发现hive 有个很牛逼的彩蛋:hive hooks 。hive hooks绑定了hive内部的工作机制,提供了使用hive扩展和集成外部功能的能力,可用于在查询处理的各个步骤中注入一些代码,而无需重新编译hive。

 

接下来就看该在哪个阶段注入代码了,根据钩子的类型,它可以在查询处理期间的不同点调用:

  • Pre-semantic-analyzer hooks:在Hive在查询字符串上运行语义分析器之前调用。

  • Post-semantic-analyzer hooks:在Hive在查询字符串上运行语义分析器之后调用。

  • Pre-driver-run hooks:在driver执行查询之前调用。

  • Post-driver-run hooks:在driver执行查询之后调用。

  • Pre-execution hooks:在执行引擎执行查询之前调用。

  • Post-execution hooks:在查询执行完成之后以及将结果返回给用户之前调用。

  • Failure-execution hooks:当查询执行失败时调用。

 

实现过程

整个实现过程比较简单,是因为发现hive的api案例中已经实现了类似的功能,我们要做的就是把这个稍做改造。

 

代码

研究hive hooks 的api时,发现hive已经实现了一个血缘关系的hook:

只是这个hook 是把相关的依赖写在了 log里:

 

下面,我们需要做一些设计,比如设计一张mysql表t_table_column_dependency来存放字段依赖的关系:

 

如上,要有依赖关系的创建时间和更新时间,方便及时清理已经过期的依赖

部分写入代码如下 :

 

部署

添加参数

vim $HIVE_HOME/conf/hive-site.xml

 

创建auxlib

 

cd $HIVE_HOME/mkdir auxlib ## 这个目录主要存放用户自定义jar包,将编译好的jar上传至该目录

这样部署就完成了,执行hive sql会自动调用该方法,将依赖关系写入数据库,前端页面从数据库中读取信息展示

 

效果

测试案例:

--创建三张表CREATE TABLE IF NOT EXISTS EXPOSURE (session_id string COMMENT 'session_id',kv map<string,string>)PARTITIONED BY (day string);create table tmp_test_a (s1 string, s2 int);create table tmp_test_b (s1 string, s2 int);
--insert语句insert into table tmp_test_aselecttmp.ss,tmpb.s2from(select session_id,kv['CC'] as ss from EXPOSURE where day=20190101) tmp left join tmp_test_b tmpb on tmp.session_id=tmpb.s1

 

结果:

 

总结

利用hive hooks有以下优点:

1、sql执行完后自动更新依赖关系

2、写入依赖关系模块的执行状态不会影响线上的任务,即如果依赖关系由于一些原因写入失败,不会影响线上任务的正常运行

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

实用主义学Python(小白也容易上手的Python实用案例)

12-24
原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会  【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值