【文末有惊喜!】Hive SQL血缘关系解析与应用


本文字数:7860

预计阅读时间:20分钟

1 研究背景

随着企业信息化和业务的发展,数据资产日益庞大,数据仓库构建越来越复杂,在数仓构建的过程中,常遇到数据溯源困难,数据模型修改导致业务分析困难等难题,此类问题主要是由于数据血缘分析不足造成的,只有强化血缘关系,才能帮助企业更好的发挥数据价值。

SQL血缘关系是数据仓库模型构建的核心依赖。通过对SQL语句进行梳理与解析,得到各个业务层表之间依赖关系和属性依赖关系,并进行可视化展示,形成数据表和属性血缘层次关系图,充分展示了原始字段数据与数据模型的映射关系。拥有良好的SQL血缘关系系统,不仅有利于数据分析师对业务场景的梳理,还极大帮助对其数仓分层的构建,同时对企业数据质量控制方面起到很好的朔源作用,对构造数据链路图,监控数据变化起到很好的辅助作用。

市场存在一系列血缘关系解析工具,如Druids,但由于只支持对mysql语句的解析,且解析力度不够,不支持复杂的sql逻辑等问题,导致无法在企业中得到广泛使用。同样的hive自身的血缘解析往往在sql执行之后,才可得到解析结果,如果sql执行比较耗时,导致血缘关系无法快速展现,同时造成没有办法提前进行元数据安全和权限认证等问题,在企业真实应用中有一定的限制。

本文结合公司自身业务,研究Hive血缘关系解析源码,并进行优化,首先简化SQL语句剪枝和对包含CTE别名数据表的识别与剔除,降低SQL解析的复杂性,提高血缘解析性能;其次,提供元数据信息服务模块,既保证元信息的完整性,又提供安全的数据表权限认证,维护数据表的操作权限,保证操作的安全性;然后,将postExecuteHook前置,即在SQL执行物理优化前即可获得SQL 的血缘关系,极大提高了获取SQL血缘关系的效率,后续将对这些优化策略进行逐一展开。

2 相关技术介绍

2.1 SQL血缘关系介绍

在数据仓库构建的过程中,SQL血缘关系体现了各个数据表以及相关属性的依赖关系。SQL血缘关系即是对业务流程涉及到的模型表进行梳理,它包含了集群血缘关系、系统血缘关系、表级血缘关系和字段血缘关系,其指向数据的上游来源,向上游追根溯源。通过简单的SQL语句展现各个表之间的数据关系。

INSERT overwrite TABLE ads_shmm_wap_homepage_s3_nu_retention_1d_di PARTITION (

dt = $ { SYSTEM_BIZDATE }) SELECT

a.source_first_id,

a.source_second_id,

a.source_third_id,

b.vst_cookie 

FROM

( SELECT source_first_id, source_second_id,  source_third_id, vst_cookie FROM ads_shmm_wap_homepage_s3_new_cookie_di WHERE dt = $ [ yyyyMMdd - 2  ] ) a

JOIN ( SELECT vst_cookie FROM ads_shmm_wap_homepage_cookie_di WHERE dt = $ {  SYSTEM_BIZDATE } ) b ON a.vst_cookie = b.vst_cookie;

图2-1 业务SQL解析样例示意图

通过SQL血缘关系解析,得到的对应的血缘关系依赖图,如下图所示:

图2-2 数据表血缘关系依赖示意图

对应字段关系示意图如下所示:

    图2-2 数据表字段级别血缘关系依赖示意图

血缘关系一般是指表级和字段级,其能清晰展现数据加工处理逻辑脉络,快速定位数据异常字段影响范围,准确圈定最小范围数据回溯,降低了理解数据和解决数据问题的成本。同时数据血缘关系可与数据质量监控系统进行完美的整合,重要数据质量检测异常结果可通过数据血缘关系直接定位影响范围。

 

2.2 ANTLR技术介绍

Atlas是Apache开源的元数据治理方案。Hook执行中采集数据(如hivehook),发送Kafka,消费Kafka数据,生成Relation关系保存图数据库Titan,并提供REST接口查询功能,支持表血缘,列级支持不完善。

Durid虽在SQL解析中发挥很大的作用,但主要支持Mysql 语法,对Hive SQL仅仅是支持一些简单的操作。

Antlr作为一个强大的解释器,用来读取,处理,执行或翻译结构化文本或二进制文件。通过 Antlr可以构造出相应的词法分析器 (Lexer)、语法分析器 (Parser) 和树分析器 (TreeParser)。自动构建解析树的解析器,用于表示语法如何匹配输入的数据结构;自动生成树遍历器,遍历AST树的节点以执行特定于应用程序的代码。现通过ANTLR Works展示词法分析与语法分析的处理过程,举例如下:

insert into  b SELECT c FROM a

经词法分析,识别字符串中单词,并对字符串进行分类,得到token集合,具体流程如下图所示:

图 2-3 SQL词法分析执行流程图

通过SQL词法分析&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值