数据血缘分析方法、装置、电子设备和存储介质
文献发布时间:2023-06-19 11:35:49
技术领域
本申请涉及数据处理技术领域,特别是涉及一种数据血缘分析方法、装置、电子设备和存储介质。
背景技术
随着数据爆炸时代的来临,数据对于个人和企业而言都成为了重要资产。在进行数据建设和管理时,数据从产生、加工和流转过程中会产生数据之间的血缘关系,当数据量不断增加后数据之间的血缘关系会更加复杂,当数据出现质量问题时,由于无法获取不同层级的数据之间的血缘关系,因此,需要对数据进行层层筛查,极大地增加了数据筛查的成本。有鉴于此,如何获取数据加工过程中数据之间的血缘关系,降低数据筛查的成本成为亟待解决的问题。
发明内容
本申请主要解决的技术问题是提供一种数据血缘分析方法、装置、电子设备和存储介质,能够获取数据加工过程中数据之间的血缘关系,降低数据筛查的成本。
为解决上述技术问题,本申请第一方面提供一种数据血缘分析方法,所述数据血缘分析方法包括:获取到待处理的SQL语句,将所述SQL语句转换成抽象语法树;获取到所述抽象语法树的解析规则和解析策略;其中,所述SQL语句对应的多种类型的数据分别对应有一种所述解析规则,所述解析规则针对所述抽象语法树的不同层级的节点包括不同的所述解析策略;基于所述抽象语法树的解析规则和所述解析策略,遍历所述抽象语法树的多个层级的节点;利用所述多个层级的节点将所述抽象语法树转换为逻辑执行计划;对所述逻辑执行计划进行迭代分析,以获得所述SQL语句对应的数据之间的血缘关系。
为解决上述技术问题,本申请第二方面提供一种数据血缘分析装置,所述数据血缘分析装置包括:处理模块,用于获取待处理的SQL语句,将所述SQL语句转换成抽象语法树;获取模块,用于获取所述抽象语法树的解析规则和解析策略;其中,所述SQL语句对应的多种类型的数据分别对应有一种所述解析规则,所述解析规则针对所述抽象语法树的不同层级的节点包括不同的所述解析策略;查找模块;用于基于所述抽象语法树的解析规则和解析策略,遍历所述抽象语法树的多个层级的节点;转换模块,用于利用所述多个层级的节点将所述抽象语法树转换为逻辑执行计划;分析模块,用于对所述逻辑执行计划进行迭代分析,以获得所述SQL语句对应的数据之间的血缘关系。
为解决上述技术问题,本申请第三方面提供一种电子设备,包括相互耦接的存储器和处理器,其中,所述存储器存储有程序指令,所述处理器用于执行所述存储器中存储的程序指令,以实现上述第一方面的数据血缘分析方法。
为解决上述技术问题,本申请第四方面提供一种计算机可读存储介质,其上存储有程序指令,所述程序指令被处理器执行时实现上述第一方面的数据血缘分析方法。
本申请的有益效果是:本申请将SQL语句转换成抽象语法树,获取到抽象语法树的解析规则和解析策略,其中针对每种类型的数据对应一种解析规则且抽象语法树的不同层级的节点对应有各层级的解析策略,基于针对抽象语法树不同节点的解析规则和解析策略,遍历抽象语法树多个层级的节点以获得逻辑执行计划,对逻辑执行计划进行迭代分析进而将SQL语句对应的数据之间的血缘关系提取出来。故此,对待处理的SQL语句进行转换和分析,以获取数据之间的血缘关系,进而对不同层级的数据进行筛查时可提高效率,降低数据筛查的成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
图1是本申请数据血缘分析方法一实施例的流程示意图;
图2是本申请数据血缘分析方法另一实施例的流程示意图;
图3是图2中步骤S207对应的一实施例的流程示意图;
图4是本申请数据血缘分析装置一实施例的框架示意图;
图5是本申请电子设备一实施例的框架示意图;
图6是本申请计算机可读存储介质一实施例的框架示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。此外,本文中的“多”表示两个或者多于两个。
请参阅图1,图1是本申请数据血缘分析方法一实施例的流程示意图。具体而言,可以包括如下步骤:
步骤S101:获取到待处理的SQL语句,将SQL语句转换成抽象语法树。
具体地,获取SQL语句的源代码,将源代码的字符流依次读入,对源代码进行语法分析以获得抽象语法树。
在一应用方式中,获取到待处理的SQL语句对应的源代码,基于源代码的结束符对源代码进行切分,以获得源代码对应的多行代码;去除多行代码中的冗余字符,以获得处理后的多行代码;利用语法分析器对处理后的多行代码进行语义分析,以获得抽象语法树。
具体地,获取到开发人员编写的SQL语句的源代码,对源代码以分号结束符作为切分节点,将源代码切分为多行代码,以形成源代码对应的代码结构,将多行代码中的冗余换行符、指标符、注释语句去除,以获得处理后的多行代码,并对处理后的多行代码进行逐行SQL语义解析,以获得抽象语法树,将冗余字符去除以提高语义解析的效率,并降低冗余字符对语义解析的影响,提高语义解析的准确率,以使获得的抽象语法树与待处理的SQL语句匹配度更高。
步骤S102:获取到抽象语法树的解析规则和解析策略;其中,SQL语句对应的多种类型的数据分别对应有一种解析规则,解析规则针对抽象语法树的不同层级的节点包括不同的解析策略。
具体地,SQL语句对应的多种类型的数据分别对应有一种解析规则,解析规则针对不同层级的节点包括不同的解析策略。
进一步地,获取预先定义的解析规则、策略。针对表对象、字段对象、聚合函数、子查询、分组函数和别名引用等类型的数据,预先设定的解析规则定义有表对象解析器、字段对象解析器、聚合函数解析器、子查询解析器、分组函数解析器和别名引用解析器。在每一类型的数据的解析规则下,每一解析规则对应不同层级的节点预设有针对各层级的节点的大小写转换解析策略、排序分组解析策略、别名解析策略、聚合计算解析策略,以满足不同类型的数据和抽象语法树中不同层级的节点的解析需求,提高解析的准确率。
步骤S103:基于抽象语法树的解析规则和解析策略,遍历抽象语法树的多个层级的节点。
具体地,预先定义有针对抽象语法树多个层级节点的解析规则和解析策略,获取到抽象语法树的解析规则和解析策略后,基于抽象语法树的解析规则和解析策略对抽象语法树的节点进行分析,从层级高的节点向层级低的节点直至遍历抽象语法树的所有节点。
在一应用方式中,抽象语法树包括层级从高到低的一元节点、二元节点和叶子节点,针对抽象语法树中的表对象、字段对象设有各自对应的解析规则,对于同一类型的对象在一元节点、二元节点和叶子节点设有对应的解析策略,基于预先设定的抽象语法树的解析规则和解析策略,对抽象语法树中不同类型的对象在一元节点、二元节点和叶子节点进行分析,以获得多个层级的节点。
步骤S104:利用多个层级的节点将抽象语法树转换为逻辑执行计划。
具体地,对多个层级的节点进行转换,以获得基于解析后多个层级的节点的逻辑执行计划。
在一应用方式中,遍历抽象语法树的节点,忽略优化器策略扫描数据文件及生成物理执行计划,基于解析后的多个层级的节点获得逻辑执行计划,便于后续分析迭代。
步骤S105:对逻辑执行计划进行迭代分析,以获得SQL语句对应的数据之间的血缘关系。
具体地,转化为逻辑执行计划后,对逻辑执行计划不断地分析迭代,迭代过程中会遇到多个层级的节点,通过递归方法直到获取到层级最高的节点,并记录迭代过程中的数据之间的继承关系,进而将SQL语句对应的数据之间的血缘关系提取出来。
在一应用方式中,对逻辑执行计划不断的分析迭代,迭代过程中会遇到叶子节点、二元节点和一元节点,记录迭代过程中的继承关系,从而实现,读取数据信息和数据的加工逻辑,比如当前表中的某个字段的来源于哪些对象中的数据,计算方式中是否包括聚合、去重等,对逻辑执行计划进行深度遍历,以最终达到数据血缘分析的目的。
上述方案,将SQL语句转换成抽象语法树,获取到抽象语法树的解析规则和解析策略,其中针对每种类型的数据对应一种解析规则且抽象语法树的不同层级的节点对应有各层级的解析策略,基于针对抽象语法树不同节点的解析规则和解析策略,遍历抽象语法树多个层级的节点以获得逻辑执行计划,对逻辑执行计划进行迭代分析进而将SQL语句对应的数据之间的血缘关系提取出来。故此,对待处理的SQL语句进行转换和分析,以获取数据之间的血缘关系,进而对不同层级的数据进行筛查时可提高效率,降低数据筛查的成本。
请参阅图2,图2是本申请数据血缘分析方法另一实施例的流程示意图。具体而言,可以包括如下步骤:
步骤S201:获取到待处理的SQL语句,将SQL语句转换成抽象语法树。
具体地,藉由语法分析器对SQL语句进行语法分析,以避免原始文件扫描,对SQL语句进行逐行分析,以将SQL语句转换为抽象语法树。
在一应用方式中,藉由Antlr4语法分析器用于词法和语法的分析,其英文全称为Another Tool for Language Recognition,获取结构化查询语言的源代码,将源代码的字符流依次读入,识别出字符流中的词素,在获得词素后,将词素映射为标记,一个标记对应结构化查询语言的语法中的一个类型,进一步对所有标记进行语法分析,将所有标记组合生成抽象语法树。
步骤S202:获取到解析规则和解析策略。
具体地,SQL语句对应的多种类型的数据分别对应有一种解析规则,解析规则针对不同层级的节点包括不同的解析策略,且解析策略兼容多种类型的SQL语句的语法规则。其中,解析规则和解析策略向后兼容Presto等其他SQL语法规则。针对不同的语法规则,预先设定兼容多种语法规则的解析策略,以满足不同类型的数据在多种语法规则下的解析需求,以提高对抽象语法树进行解析时的兼容性。
步骤S203:获取到用户定义的自定义函数及其对应的映射缓存,其中,映射缓存对应有自定义函数的常量数据。
具体地,获取自定义函数并建立自定义函数对应的映射缓存,基于初始化阶段的基础信息,加载自定义函数所需的外部程序代码并动态加载到ClassLoader,最终完成自定义函数的注册并建立对应的映射缓存,便于后续步骤使用。
在一应用方式中,获取到用户定义的自定义函数及其对应的映射缓存的步骤之前,包括:从外部存储中获取并缓存元数据信息,元数据信息包括自定义函数。进而,获取到用户定义的自定义函数及其对应的映射缓存的步骤,包括:从外部存储和/或SQL语句中获取多个自定义函数,对多个自定义函数分别建立自定义函数对应的映射缓存。
具体地,外部存储中存储有数据库名、表名和自定义函数等元数据信息,将部分元数据信息缓存后,可减少后续步骤获取元数据的额外开销,提高数据处理效率。
进一步地,外部存储元件中存储有元数据信息的目录,从元数据信息的目录中可获取所需的自定义函数,或者通过SQL语句创建用户所需的自定义函数,将自定义函数的常量数据的来源和去向分别与自定义函数进行映射,以获得自定义函数对应的映射缓存便于后续步骤的调用。
步骤S204:基于自定义函数对应的映射缓存、解析规则及其针对不同层级的节点的解析策略,遍历抽象语法树的多个层级的节点。
具体地,结合预定义好的解析规则、策略、自定义函数对抽象语法树进行深度解析,以遍历抽象语法树的多个层级的节点,对于已定义有解析规则的数据采用对应类型的解析规则,并在不同层级的节点采用对应的解析策略,对于未预先定义解析规则的数据,获取自定义函数以对未预先定义解析规则的数据进行解析,以满足抽象语法树多种类型的数据的解析需求,提高抽象语法树遍历的效率和解析的准确率。
步骤S205:利用多个层级的节点得到抽象语法树对应的对象化元素。
具体地,获取到解析后的多个层级的节点,对解析后的抽象语法树进行对象化处理,转换为子查询对象、表扫描对象、关联查询对象,便于后续步骤直接操作转换后的对象化元素,避免直接操作语法树对象,降低系统处理的负担,提高处理效率。
步骤S206:基于对象化元素生成逻辑执行计划。
具体地,将对象化元素转换成逻辑执行计划,当任一类型的数据对应的解析器识别到逻辑执行时,则不再进行解析以使其他类型的数据对应的解析器对抽象语法树进行深度遍历,直至各类型的数据转换为对象化元素并生成逻辑执行计划。
步骤S207:对逻辑执行计划对应的对象化元素进行迭代分析,以获得迭代分析过程中SQL语句对应的多种类型的数据之间的血缘关系。
具体地,基于逻辑执行计划对应的对象化元素进行数据提取和解析,分析出输入输出表、字段和分区对应的处理条件,以获得各数据表、字段和分区之间的关系,进而获取数据加工过程中数据之间的血缘关系,降低数据筛查的成本。
在一具体应用场景中,请参阅图3,图3是图2中步骤S207对应的一实施例的流程示意图。具体而言,可以包括如下步骤:
步骤S301:对对象化元素进行信息提取,以获得对象化元素中的基础信息。
具体地,基于对象化元素进行信息提取,包括查询对象、执行命令对象,对对象化元素进行迭代分析。其中,查询对象包括select、with关键字,执行命令对象包括create、add关键字,针对查询对象,通过已绑定的目录信息,提取出查询中包括的表名、字段名、备注、分区信息及计算方式,迭代时记录对象唯一hash值,作为下一元素的父节点编码。针对部分执行命令对象,执行对应操作,如切换默认数据库、创建自定义函数等。迭代分析至对象化元素无层级更低的元素对象时,结束迭代分析,以获得基础信息。
步骤S302:对对象化元素进行常量识别,以获得对象化元素中的常量信息。
具体地,分析对象化元素中查询表达式、过滤条件表达式、分组表达式中编写的常量信息,以获得对象化元素中的常量信息。
在一应用场景中,获取到select‘1’as f1 from xx where dt=‘2020-01-01’表达式,解析结果中将获得f1字段对应常量值‘1’,dt字段对应常量值‘2020-01-01’,便于后续步骤获取常量识别结果。
步骤S303:对对象化元素进行过滤条件分析,以获得对象化元素中的过滤限定信息。
具体地,分析对象化元素中单表、多表、子查询模块中包括的过滤限定条件进行信息提取,并记录字段来源,并记录过滤限定关系,其中,过滤限定关系至少包括:大于、等于、小于、等于、不等于及迭代符合限定条件IF,并根据常量识别结果,实现过滤条件推断以获得过滤限定信息。
在一应用场景中,获取到A表限定条件为dt='2020-01-01',A表关联B表的限定条件为A.dt=B.dt,则可以推断出B.dt='2020-01-01'。
步骤S304:对对象化元素进行自定义函数识别,以获得对象化元素中的自定义函数,并利用反射机制获取映射缓存中的常量数据。
具体地,解析待处理SQL语句中定义的自定义函数,并分析自定义函数输入参数是否均为常量,若均为常量,利用JAVA反射机制从映射缓存中获取实例化该类调用UDF函数并计算结果,将计算结果存储为常量数据。
步骤S305:对对象化元素进行伪动态分区识别,以获得对象化元素中的隐含的常量分区字段。
具体地,当覆盖写入某个表的分区时,SQL语句中若指定以动态分区写入,则基于以上步骤中常量识别结果和过滤限定信息,分析SQL语句中是否包括隐含常量分区字段,并完成分区字段常量绑定,实现伪动态分区识别,以获得隐含的常量分区字段。
步骤S306:基于基础信息、常量信息、过滤限定信息、常量数据和隐含的常量分区字段,获取多种类型的数据各自的转换逻辑,以获得SQL语句对应的多种类型的数据之间的血缘关系。
具体地,通过递归解析迭代过程,可实现对逻辑计划的对象化元素进行迭代分析,以完成基础信息提取、常量信息提取、过滤限定信息提取、常量数据提取和隐含的常量分区字段提取。从而实现,读取对象表的信息提取以及写对象表的字段加工逻辑,如结果表中的某个字段的计算方式是来源于哪些读对象表的数据,计算方式中是否包括聚合、去重等,最终达到数据血缘分析的目的。
本实施例中,将待处理SQL语句转换为抽象语法树,通过预设的解析策略和自定义函数解析抽象语法树多个层级的节点,获得对象化元素并转换为逻辑执行计划,对逻辑执行计划对应的对象化元素进行迭代分析,以获得迭代分析过程中SQL语句对应的多种类型的数据之间的血缘关系,以实现表、分区、字段及计算方式等数据间的血缘关系分析,节省对数据进行人力梳理的成本。
请参阅图4,图4是本申请数据血缘分析装置一实施例的框架示意图。数据血缘分析装置40包括:处理模块400、获取模块402、查找模块404、转换模块406和分析模块408。处理模块400用于获取待处理的SQL语句,将SQL语句转换成抽象语法树;获取模块402用于获取抽象语法树的解析规则和解析策略;其中,SQL语句对应的多种类型的数据分别对应有一种解析规则,解析规则针对抽象语法树的不同层级的节点包括不同的解析策略;查找模块404用于基于抽象语法树的解析规则和解析策略,遍历抽象语法树的多个层级的节点;转换模块406用于利用多个层级的节点将抽象语法树转换为逻辑执行计划;分析模块408用于对逻辑执行计划进行迭代分析,以获得SQL语句对应的数据之间的血缘关系。
上述方案,处理模块400将SQL语句转换成抽象语法树,获取模块402获取到抽象语法树的解析规则和解析策略,其中针对每种类型的数据对应一种解析规则且抽象语法树的不同层级的节点对应有各层级的解析策略,查找模块404基于针对抽象语法树不同节点的解析规则和解析策略,转换模块406遍历抽象语法树多个层级的节点以获得逻辑执行计划,分析模块408对逻辑执行计划进行迭代分析进而将SQL语句对应的数据之间的血缘关系提取出来。故此,对待处理的SQL语句进行转换和分析,以获取数据之间的血缘关系,进而对不同层级的数据进行筛查时可提高效率,降低数据筛查的成本。
在一些实施例中,获取模块402还可以用于:获取到用户定义的自定义函数及其对应的映射缓存;其中,映射缓存对应有自定义函数的常量数据。转换模块406还可以用于:基于自定义函数对应的映射缓存、解析规则及其针对不同层级的节点的解析策略,遍历抽象语法树的多个层级的节点。
在一些实施例中,转换模块406还可以用于:利用多个层级的节点得到抽象语法树对应的对象化元素;基于对象化元素生成逻辑执行计划。
在一些实施例中,分析模块408还可以用于:对逻辑执行计划对应的对象化元素进行迭代分析,以获得迭代分析过程中SQL语句对应的多种类型的数据之间的血缘关系。
在一些实施例中,分析模块408还可以用于:对对象化元素进行信息提取,以获得对象化元素中的基础信息;以及,对对象化元素进行常量识别,以获得对象化元素中的常量信息;以及,对对象化元素进行过滤条件分析,以获得对象化元素中的过滤限定信息;以及,对对象化元素进行自定义函数识别,以获得对象化元素中的自定义函数,并利用反射机制获取映射缓存中的常量数据;以及,对对象化元素进行伪动态分区识别,以获得对象化元素中的隐含的常量分区字段;基于基础信息、常量信息、过滤限定信息、常量数据和隐含的常量分区字段,获取多种类型的数据各自的转换逻辑,以获得SQL语句对应的多种类型的数据之间的血缘关系。
在一些实施例中,获取模块402还可以用于:从外部存储中获取并缓存元数据信息,元数据信息包括自定义函数;从外部存储和/或SQL语句中获取多个自定义函数,对多个自定义函数分别建立自定义函数对应的映射缓存。
在一些实施例中,处理模块400还可以用于:获取到待处理的SQL语句对应的源代码,基于源代码的结束符对源代码进行切分,以获得源代码对应的多行代码;去除多行代码中的冗余字符,以获得处理后的多行代码;利用语法分析器对处理后的多行代码进行语义分析,以获得抽象语法树。
请参阅图5,图5是本申请电子设备一实施例的框架示意图。电子设备50包括相互耦接的存储器501和处理器502,存储器501存储有程序指令,处理器502用于执行存储器501中存储的程序指令,以实现上述任一数据血缘分析方法实施例的步骤。
具体而言,处理器502用于控制其自身以及存储器501以实现上述任一数据血缘分析方法实施例的步骤。处理器502还可以称为CPU(Central Processing Unit,中央处理单元)。处理器502可能是一种集成电路芯片,具有信号的处理能力。处理器502还可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器502可以由集成电路芯片共同实现。
上述方案,处理器502通过获取数据加工过程中数据之间的血缘关系,降低数据筛查的成本。
请参阅图6,图6是本申请计算机可读存储介质一实施例的框架示意图。计算机可读存储介质60存储有能够被处理器运行的程序指令600,程序指令600用于实现上述任一数据血缘分析方法实施例的步骤。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
- 数据血缘分析方法、装置、电子设备和存储介质
- 字段血缘分析方法、装置、电子设备及存储介质