一种数据仓库的血统分析方法和装置的制造方法
【技术领域】
[0001]本发明涉及数据仓库技术,特别是涉及一种数据仓库的血统分析方法和装置。
【背景技术】
[0002]随着互联网大爆发以来,面对日益增长的海量数据,用以支撑主流搜索引擎公司,电子商务,社交网站的传统数据仓库(Data Warehouse,Dff)系统早已不堪重负了,而构建于分布式系统基础架构Hadoop集群之上的数据仓库工具Hive的出现恰逢其时,已成为实现大数据时代分布式数据仓库的福音。近年来数据仓库的数据质量问题已经严重影响了商务智能的应用能力。基础数据的正确性、真实性直接影响到报表和分析结果的可信度,因此需要快速回溯数据的来龙去脉和精确追踪数据的最底层来源。有时需要准确评估仓库上游数据变更,对下游应用的影响,有时需要分析表及字段的重要程度或无关程度,而这一切都需要通过分析数据仓库的元数据给出答案。这个领域就是数据仓库的血统分析。
[0003]数据仓库的血统分析是建立在仓库的元数据基础上的,在整个数据仓库中元数据的范畴是极其广泛,从底层到应用层都有其用武之地。具体地,在数据来源方面,需要包含源系统的库表信息等;在数据采集层,元数据需要清楚地记录数据仓库的映射关系、ETL程序信息、数据转换清洗的规则等;在数据存储和基础层,元数据需要清楚描述DW数据的物理结构、数据字典、资源目录等详细信息;在应用服务层,元数据则需要包含数据分析模型、KPI关键业务指标等。通过数据血统分析,可以获得数据在数据流中的演化过程,包括数据的起源和处理这些数据的所有后继过程。实现数据仓库的血统分析主要包括数据血统的计算、存储和查询等。
[0004]现有成熟的血统分析工具都是基于传统数据仓库的特定商业实现,还没有基于Hive开源数据仓库的血统分析工具。
[0005]而现有的关系型数据库的血统分析开源方案通常是采用关键词解析的方式实现,即通过提取结构化查询语言(SQL)语法关键词前后的有用信息,得到相应的数据来源表和数据目标表信息。
[0006]上述现有的血统分析方案,只能分析到数据的表级粒度,如此,关键型细节将会缺失。例如,表的元数据信息、表的查询约束条件等都无法获知,这样,就无法利用血统分析结果满足用户的数据回溯需要以及准确分析上游元数据对下游的影响,从而导致由于分析粒度太粗所致的分析结果实用价值不高的问题。
【发明内容】
[0007]有鉴于此,本发明的主要目的在于提供一种数据仓库的血统分析方法和装置,可以提高血统分析数据的应用价值,有利于用户的数据回溯以及分析数据仓库上游元数据对下游数据应用环节的影响。
[0008]为了达到上述目的,本发明提出的技术方案为:
[0009]一种数据仓库的血统分析方法,包括:
[0010]对于当前执行的蜂巢结构化查询语言HQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句;
[0011]对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树;
[0012]对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。
[0013]一种数据仓库的血统分析装置,包括:
[0014]拆分单元,用于对于当前执行的蜂巢结构化查询语言HQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句;
[0015]语法树生成单元,用于对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树;
[0016]采集关联单元,用于对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。
[0017]综上所述,本发明提出的数据仓库的血统分析方法和装置,通过将HQL语句段进行拆分,细化分析粒度,可以采集到更多有用数据,避免关键信息的丢失,从而可以提高血统分析数据的应用价值,有利于用户的数据回溯以及分析数据仓库上游元数据对下游数据应用环节的影响。
【附图说明】
[0018]图1为本发明实施例一的方法流程示意图;
[0019]图2为本发明实施例一的装置结构示意图。
【具体实施方式】
[0020]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
[0021]本发明的核心思想是:先将HQL语句段进行拆分,然后再对拆分后的每个单元分别进行分析,并生成相应的抽象语法树,最后再基于语法树采集相应的数据信息。如此,通过细化血统分析的数据粒度,可以获得更多有用数据,避免关键信息的丢失,从而可以提高血统分析数据的应用价值,有利于用户的数据回溯以及分析上游元数据对下游的影响。
[0022]一种数据仓库的血统分析方法,包括:
[0023]步骤101、对于当前执行的蜂巢结构化查询语言(HIVE SQL,HQL)语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句。
[0024]本步骤,用于对每个HQL语句段进行拆分预处理,得到若干个有效的最小可执行语句,以便在后续步骤中,分别针对各子语句进行独立分析。如此,通过细化血统分析的粒度,可以避免关键信息的丢失。
[0025]较佳地,可以采用下述步骤进行所述拆分预处理。
[0026]步骤1011、对所述HQL语句段进行拆分,得到相应的子语句集合,所述集合中的每个子语句为最小的可执行语句。
[0027]步骤1012、删除所述子语句集合中对数据仓库有物理操作的语句。
[0028]本步骤用于对子语句集合中的语句进行筛选,去除其中对数据仓库有物理操作的语句,如用于添加分区,删除分区,创建表,删除表,导出数据至本地等语句,以避免改变数据仓库中的数据。具体的对数据仓库有物理操作的语句的识别,为本领域技术人员所掌握,在此不再赘述。
[0029]步骤1013、将所述HQL语句段所属程序的信息,与当前所述子语句集合中的每个子语句进行关联。
[0030]本步骤中,为了便于进行全链分析,需要将HQL语句段所在的程序信息与其各子语句进行关联。
[0031]步骤1014、将所述子语句集合中的子语句作为所述有效子语句。
[0032]步骤102、对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树。
[0033]本步骤用于生成各有效子语句对应的抽象语法树,以便在步骤103中实现数据的采集。本步骤可采用现有语法分析工具实现。
[0034]较佳地,可以采用基于Java开发的功能强大的语言识别工具:Antlr语法分析工具,来进行所述语法、词法和语义分析,生成相应的抽象语法树。
[0035]步骤103、对于每个抽象语法树,遍历该抽象语法树中的每
个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。
[0036]本步骤用于遍历各有效子语句对应的每个抽象语法树中的各节点,以便收集血统分析所需要的各种信息,即在各节点上采用相应的节点数据。
[0037]较佳地,所述节点数据可以包括下述内容:
[0038]表节点的元数据信息(如表节点类型是临时别名表还是实体表、字段信息(包括内查询输入字段,查询输出字段及表达式,输出字段的最底层来源,关联的条件))、表节点的查询约束条件(如表的过滤条件)、本节点与兄弟节点的协作关系(如关联表的信息)以及本节点和父节点的查询关系。
[0039]具体地,所述元数据信息包括表的物理结构、类型和分区信息。
[0040]这里,通过在每个节点上采集节点数据,可以获得表、字段的来龙去脉和加工明细信息,但是,这些节点数据还不够全面,不能支持用户的数据回溯,需要再将这些数据与相应的数据仓库的元数据(即表属于的生产库、ETL过程任务信息以及下游报表系统),这样,便可获得完整的血统数据链。
[0041 ] ETL (Extract-Transform-Load)过程,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。
[0042]采用上述血统分析方法,所得到的血统分析数据,将有利于快速回溯数据的加工处理过程和准确定位数据的最底层来源;能准确分析上游元数据对下游的影响,更重要的是提升了数据质量,随之提升了报表和分析结果的可信度。
[0043]图2为与上述方法相对应的数据仓库的血统分析装置结构示意图,如图所示,该装置包括:
[0044]拆分单元,用于对于当前执行的蜂巢结构化查询语言HQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句。
[0045]语法树生成单元,用于对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树。
[0046]采集关联单元,用于对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。
[0047]较佳地,所述拆分单元,进一步用于对所述HQL语句段进行拆分,得到相应的子语句集合,所述集合中的每个子语句为最小的可执行语句;删除所述子语句集合中对数据仓库有物理操作的语句;将所述HQL语句段所属程序的信息,与当前所述子语句集合中的每个子语句进行关联;将所述子语句集合中的子语句作为所述有效子语句。
[0048]较佳地,所述语法树生成单元,进一步用于采用Antlr语法分析工具,进行所述语法、词法和语义分析,生成相应的抽象语法树。
[0049]较佳地,所述节点数据包括:表节点的元数据信息、表节点的查询约束条件、本节点与兄弟节点的协作关系以及本节点和父节点的查询关系。
[0050]较佳地,所述元数据信息包括表的物理结构、类型和分区信息。
[0051]综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种数据仓库的血统分析方法,其特征在于,包括: 对于当前执行的蜂巢结构化查询语言HQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句; 对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树; 对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。2.根据权利要求1所述的方法,其特征在于,所述拆分预处理包括: 对所述HQL语句段进行拆分,得到相应的子语句集合,所述集合中的每个子语句为最小的可执行语句; 删除所述子语句集合中对数据仓库有物理操作的语句; 将所述HQL语句段所属程序的信息,与当前所述子语句集合中的每个子语句进行关联; 将所述子语句集合中的子语句作为所述有效子语句。3.根据权利要求1所述的方法,其特征在于,采用Antlr语法分析工具,进行所述语法、词法和语义分析,生成相应的抽象语法树。4.根据权利要求1所述的方法,其特征在于,所述节点数据包括: 表节点的元数据信息、表节点的查询约束条件、本节点与兄弟节点的协作关系以及本节点和父节点的查询关系。5.根据权利要求4所述的方法,其特征在于,所述元数据信息包括表的物理结构、类型和分区信息。6.一种数据仓库的血统分析装置,其特征在于,包括: 拆分单元,用于对于当前执行的蜂巢结构化查询语言HQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句; 语法树生成单元,用于对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树; 采集关联单元,用于对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。7.根据权利要求6所述的装置,其特征在于,所述拆分单元,进一步用于对所述HQL语句段进行拆分,得到相应的子语句集合,所述集合中的每个子语句为最小的可执行语句;删除所述子语句集合中对数据仓库有物理操作的语句;将所述HQL语句段所属程序的信息,与当前所述子语句集合中的每个子语句进行关联;将所述子语句集合中的子语句作为所述有效子语句。8.根据权利要求6所述的装置,其特征在于,所述语法树生成单元,进一步用于采用Antlr语法分析工具,进行所述语法、词法和语义分析,生成相应的抽象语法树。9.根据权利要求6所述的装置,其特征在于,所述节点数据包括:表节点的元数据信息、表节点的查询约束条件、本节点与兄弟节点的协作关系以及本节点和父节点的查询关系O10.根据权利要求6所述的装置,其特征在于,所述元数据信息包括表的物理结构、类型和分区信息。
【专利摘要】本申请公开了一种数据仓库的血统分析方法和装置,其中,方法包括:对于当前执行的HIVE SQL语句段,进行拆分预处理,得到一组有效子语句,每个所述有效子语句为最小的可执行语句;对于每个所述有效子语句,进行语法、词法和语义分析,生成相应的抽象语法树;对于每个抽象语法树,遍历该抽象语法树中的每个节点,在每个节点采集相应的节点数据,并将所述节点数据与相应的数据仓库元数据关联后保存。采用本发明,可以提高血统分析数据的应用价值,有利于用户的数据回溯以及分析数据仓库上游元数据对下游的影响。
【IPC分类】G06F17/30
【公开号】CN104899314
【申请号】CN201510337139
【发明人】刘志祖, 张军, 牟一超, 张凯, 曾卓豪
【申请人】北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
【公开日】2015年9月9日
【申请日】2015年6月17日