发明内容
本发明的目的是提供一种数据内生血缘关系的分析方法、装置、计算机设备和存储介质,用于解决现有技术中的上述技术问题。
一方面,为实现上述目的,本发明提供了一种数据内生血缘关系的分析方法。
该数据内生血缘关系的分析方法包括:获取数据库的SQL日志,其中,数据库包括多个数据表,数据表包括若干字段,SQL日志包括多条SQL语句;对SQL语句进行语法解析,得到抽象语法树对象,其中,抽象语法树对象包括语法根节点和多个语法叶子节点,语法根节点为SQL语句,语法叶子节点为SQL语句中的语法结构;确定语法叶子节点对应的信息,其中,当语法结构的语法包括操作时,语法叶子节点对应的信息包括操作的标识信息,当语法结构表征目的字段时,语法叶子节点对应的信息包括第一表达式,第一表达式包括目的字段的字段名和目的字段所在数据表的表名,当语法结构表征源字段时,语法叶子节点对应的信息包括第二表达式,第二表达式包括源字段的字段名和源字段所在的数据表的表名;将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树;根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系。
进一步地,将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树的步骤包括:按照由语法叶子节点到语法根节点的顺序,将语法叶子节点对应的信息存储至节点存储栈,其中,节点存储栈的出栈逻辑为先进先出;获取节点存储栈中的对象建立SQL语句对应的血缘树。
进一步地,血缘树包括表征标识信息的中间节点、表征第一表达式或第二表达式的端节点,根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系的步骤包括:获取血缘树中两个端节点之间的路径,得到血缘路径;存储血缘路径的路径信息至血缘数据库,其中,路径信息包括所两个端节点、两个端节点之间的数据流向和两个端节点之间在血缘路径上的中间节点;显示血缘数据库中多条路径信息,以得到血缘图。
进一步地,显示血缘数据库中多条路径信息,以得到血缘图的步骤包括:将路径信息中的两个端节点映射为血缘图中的第一点和第二点,其中,路径信息的一个端节点中的表名映射为第一点的标注,路径信息的另一个端节点中的表名映射为第二点的标注;将路径信息中的两个端节点之间的数据流向映射为第一点和第二点之间的有向边;以及将路径信息中的中间节点映射为有向边的标注。
进一步地,不同路径信息中具有相同表名的端节点映射为血缘图中的同一点。
进一步地,在获取数据库的SQL日志的步骤之后,对SQL语句进行语法解析,得到抽象语法树对象的步骤之前,数据内生血缘关系的分析方法还包括:将多条SQL语句存储至消息缓存队列;其中,对SQL语句进行语法解析,得到抽象语法树对象的步骤包括:获取消息缓存队列中的消息进行语法解析,得到抽象语法树对象。
进一步地,获取数据库的SQL日志的步骤包括:通过flume组件监控和收集数据库的SQL日志。
另一方面,为实现上述目的,本发明提供了一种数据内生血缘关系的分析装置。
该数据内生血缘关系的分析装置包括:获取模块,用于获取数据库的SQL日志,其中,数据库包括多个数据表,数据表包括若干字段,SQL日志包括多条SQL语句;解析模块,用于对SQL语句进行语法解析,得到抽象语法树对象,其中,抽象语法树对象包括语法根节点和多个语法叶子节点,语法根节点为SQL语句,语法叶子节点为SQL语句中的语法结构;第一确定模块,用于确定语法叶子节点对应的信息,其中,当语法结构的语法包括操作时,语法叶子节点对应的信息包括操作的标识信息,当语法结构表征目的字段时,语法叶子节点对应的信息包括第一表达式,第一表达式包括目的字段的字段名和目的字段所在数据表的表名,当语法结构表征源字段时,语法叶子节点对应的信息包括第二表达式,第二表达式包括源字段的字段名和源字段所在的数据表的表名;处理模块,用于将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树;第二确定模块,用于根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系。
为实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时实现上述方法的步骤。
为实现上述目的,本发明还提供计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
本发明提供的数据内生血缘关系的分析方法、装置、计算机设备和存储介质,分析数据库中各数据表的数据内生血缘关系时,通过数据库的SQL日志得到SQL语句,对SQL语句进行语法解析,得到抽象语法树对象,然后根据语法结构确定语法叶子节点对应的信息,将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树,最后根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系,通过本发明,提供了一种在大数据场景下有效、便捷的数据内生血缘关系的分析方法。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了实现对数据库中各数据表的数据内生血缘关系的分析,本发明提供了一种数据内生血缘关系的分析方法、装置、计算机设备和计算机可读存储介质,在本发明提供的数据内生血缘关系的分析方法中,对数据库的数据内生血缘关系进行分析时,获取该数据库的SQL日志,将其中的SQL语句进行语法解析,得到抽象语法树对象,其中,抽象语法树对象包括语法根节点和多个语法叶子节点,语法根节点为SQL语句本身,语法叶子节点为语法解析后得到的SQL语句中的语法结构,然后根据语法结构的特征,确定语法叶子节点对应的信息,对于包括操作的语法结构,语法叶子节点对应的信息包括操作的标识信息,对于表征目的字段的语法结构,语法叶子节点对应的信息包括目的字段的字段名和目的字段所在数据表的表名,对于表征源字段的语法结构,语法叶子节点对应的信息包括源字段的字段名和源字段所在的数据表的表名,然后将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树,在该血缘树中,能够体现该SQL语句中源数据表至目的数据表的网络关系,进而,通过多条SQL语句对应的血缘树,能够确定不同数据表之间的网络关系,也即确定数据库中的数据内生血缘关系。从中可以看出,采用本发明提供的数据内生血缘关系的分析方法、装置、计算机设备和计算机可读存储介质,通过分析SQL来作为血缘分析的切入点,提供了一种在大数据场景下有效、便捷的数据内生血缘关系的分析方法。
关于本发明提供的数据内生血缘关系的分析方法、装置、计算机设备和计算机可读存储介质的具体实施例,将在下文中详细描述。
实施例一
本发明实施例提供了一种数据内生血缘关系的分析方法,通过该方法,能够分析出数据库中各数据表的数据内生血缘关系,具体地,图1为本发明实施例一提供的数据内生血缘关系的分析方法的流程图,如图1所示,该实施例提供的数据内生血缘关系的分析方法包括如下的步骤S101至步骤S105。
步骤S101:获取数据库的SQL日志。
其中,数据库包括多个数据表,数据表包括若干字段,SQL日志包括多条SQL语句,各条SQL语句用于在数据库的各个数据表之间进行数据转换和计算等。
可选地,在获取数据库的SQL日志时,可通过flume组件监控和收集数据库的SQL日志,实现了分布式的日志收集***,能够实现SQL日志的快速收集。
步骤S102:对SQL语句进行语法解析,得到抽象语法树对象。
其中,抽象语法树对象包括语法根节点和多个语法叶子节点,语法根节点为SQL语句,语法叶子节点为SQL语句中的语法结构。
在一个SQL语句中,通常包括多个语法层级的嵌套关系,例如先将两个数据表的某些字段进行运算后,将运算结果与另一个数据表的字段合并,再将合并的结果写入第四个数据表的字段中,其中的语法结构包括表征目的字段(也即第四个数据表的字段)的结果、表征源字段(也即前三个数据表分别的字段)的结构和包括中间操作的描述信息,其中,中间操作的描述信息形成语法层级的嵌套,也即两个字段的运算与两个数据字段的合并的嵌套。将SQL语句进行语法解析,得到的抽象语法树对象具有根节点和叶子节点,为了与下文中血缘树的节点相区分,将抽象语法树对象的根节点定义为语法根节点,将抽象语法树对象的叶子节点定义为语法叶子节点,语法根节点为SQL语句,语法叶子节点为SQL语句中的语法结构。
图2为本发明实施例提供的数据内生血缘关系的分析方法中抽象语法树对象的示意图,如图2所示,对一SQL语句进行语法解析,得到抽象语法树对象,以图示的正方向(也即横向纸张)来看,从左至右包括语法根节点和四层语法叶子节点,其中,第一层语法叶子节点包括三个语法叶子节点,第二层语法叶子节点包括两个语法叶子节点,第三层语法叶子节点包括三个语法叶子节点。
步骤S103:确定语法叶子节点对应的信息。
其中,当语法结构的语法包括操作时,语法叶子节点对应的信息包括操作的标识信息,当语法结构表征目的字段时,语法叶子节点对应的信息包括第一表达式,第一表达式包括目的字段的字段名和目的字段所在数据表的表名,当语法结构表征源字段时,语法叶子节点对应的信息包括第二表达式,第二表达式包括源字段的字段名和源字段所在的数据表的表名。
为了方便理解,请继续参考图2所述的抽象语法树对象,其中,第一层语法叶子节点包括的三个语法叶子节点中,语法叶子节点(下标记为1.1)“INSERT INTO db.table(col1,col2,col3)”表征目的字段,该语法叶子节点1.1对应的信息包括目的字段的字段名col1,col2,col3和目的字段所在数据表的表名db.table(图3中的Expr0);语法叶子节点1.2“SELECT cola,colb,colc”包括SELECT操作,该语法叶子节点1.2对应的信息包括SELECT;另一个语法叶子节点(下标记为1.3)表征JOIN操作,该语法叶子节点1.3对应的信息包括JOIN。
第二层语法叶子节点包括的两个语法叶子节点中,语法叶子节点(下标记为2.1)“FROM()”包括SUB操作,该语法叶子节点2.1对应的信息包括SUB;语法叶子节点(下标记为2.2)“JOIN()”包括JOIN操作,该语法叶子节点2.1对应的信息包括JOIN。
第三层语法叶子节点包括的三个语法叶子节点中,语法叶子节点(下标记为3.1)“FROM table_01”表征源字段,该语法叶子节点3.1对应的信息包括源字段的字段名c1,c2,c3和源字段所在数据表的表名table_01(图3中的Expr1);语法叶子节点(下标记为3.2)“FROM table_02”表征源字段,该语法叶子节点3.2对应的信息包括源字段的字段名ca,cb,cc和源字段所在数据表的表名table_02(图3中的Expr2);另一个语法叶子节点(下标记为3.3)“FROM table_03”表征源字段,该语法叶子节点3.3对应的信息包括源字段的字段名ca,cb,cc和源字段所在数据表的表名table_03(图3中的Expr3)。
步骤S104:将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树。
在该步骤中,根据语法叶子节点在抽象语法树对象中的层级关系,建立血缘树,并且将将语法叶子节点对应的信息作为血缘树中的节点,建立起SQL语句对应的血缘树。
仍然以图2所示的抽象语法树对象为例,建立起的血缘树如图3所示。从图3中可以看出,血缘树能够体现出SQL语句中源数据表table_01、table_02和table_03至目的数据表db.table的网络关系。
步骤S105:根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系。
在该步骤中,将多条SQL语句对应的血缘树中体现出的源数据表和目的数据表之间的网络关系综合,即可得到数据库中的数据内生血缘关系。
在该实施例提供的数据内生血缘关系的分析方法中,分析数据库中各数据表的数据内生血缘关系时,通过数据库的SQL日志得到SQL语句,对SQL语句进行语法解析,得到抽象语法树对象,然后根据语法结构确定语法叶子节点对应的信息,将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树,最后根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系,提供了一种在大数据场景下有效、便捷的数据内生血缘关系的分析方法。
可选地,在一种实施例中,将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树的步骤包括:按照由语法叶子节点到语法根节点的顺序,将语法叶子节点对应的信息存储至节点存储栈,其中,节点存储栈的出栈逻辑为先进先出;获取节点存储栈中的对象建立SQL语句对应的血缘树。
具体地,在该实施例中,建立SQL语句对应的血缘树时,先将语法叶子节点对应的信息存储至节点存储栈,然后再根据节点存储栈中的对象建立血缘树,其中,在存储语法叶子节点对应信息至节点存储栈时,按照语法叶子节点到语法根节点的顺序进行存储,保存了由边缘节点至根节点顺序下各语法叶子节点的层级关系,设置节点存储栈的出栈逻辑为先进先出,根据节点存储栈中的对象建立血缘树,顺序获取到的节点存储栈的对象之间,仍然继承了由边缘节点至根节点顺序下各语法叶子节点的层级关系。
仍然以图2所示的抽象语法树对象为例,将语法叶子节点对应的信息存储至节点存储栈后,节点存储栈如图4所示。
因此,采用该实施例提供的数据内生血缘关系的分析方法,通过节点存储栈存储语法叶子节点对应的信息,通过节点存储栈使得语法叶子节点对应的信息继承了语法叶子节点在抽象语法树对象中的层级关系,从而只需按顺序获取节点存储栈的对象,即可快速准确的建立血缘树。
可选地,在一种实施例中,血缘树包括表征标识信息的中间节点、表征第一表达式或第二表达式的端节点,根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系的步骤包括:获取血缘树中两个端节点之间的路径,得到血缘路径;存储血缘路径的路径信息至血缘数据库,其中,路径信息包括所两个端节点、两个端节点之间的数据流向和两个端节点之间在血缘路径上的中间节点;显示血缘数据库中多条路径信息,以得到血缘图。
具体地,在该实施例提供的数据内生血缘关系的分析方法中,对血缘进一步简化,仅将两个端节点之间路径的路径信息至血缘数据库,将血缘树的中间节点省略,既保留了数据库中不同数据表之间的数据关系,又减少来了血缘数据库中的数据量,同时,显示血缘数据库中的多条路径信息,即可得到血缘图,通过该血缘图图示化的显示出数据库中各数据表之间的血缘关系。
可选地,在一种实施例中,显示血缘数据库中多条路径信息,以得到血缘图的步骤包括:将路径信息中的两个端节点映射为血缘图中的第一点和第二点,其中,路径信息的一个端节点中的表名映射为第一点的标注,路径信息的另一个端节点中的表名映射为第二点的标注;将路径信息中的两个端节点之间的数据流向映射为第一点和第二点之间的有向边;以及将路径信息中的中间节点映射为有向边的标注。
具体地,在该实施例提供的数据内生血缘关系的分析方法中,血缘图中的点表征数据库中的数据表,血缘图中的有向边表征两个数据表的数据流向,将路径信息的中间节点作为有向边的标注,实现了一条路径信息的图示化显示。
可选地,在一种实施例中,不同路径信息中具有相同表名的端节点映射为血缘图中的同一点。以将不同路径信息对应的图示化进行合并,进而有助于生成简洁完整的血缘图,通过血缘图的方式来表现数据库的数据内生血缘关系,可以更加直观的表现数据的来源与去向,构建更形象的子父继承关系,降低分析的时间成本,易用性更高。
可选地,在一种实施例中,在获取数据库的SQL日志的步骤之后,对SQL语句进行语法解析,得到抽象语法树对象的步骤之前,数据内生血缘关系的分析方法还包括:将多条SQL语句存储至消息缓存队列;其中,对SQL语句进行语法解析,得到抽象语法树对象的步骤包括:获取消息缓存队列中的消息进行语法解析,得到抽象语法树对象。
具体地,将多条SQL语句存储至消息缓存队列,在对SQL语句进行语法解析时,获取消息缓存队列中的对象进行解析,实现了SQL语句的缓存,降低后续对SQL语句进行语法解析的压力。可选地,消息缓存队列可采用Kafka实现,从而利用Kafka高吞吐低延迟的特性,使其在高峰时期降低对SQL语句进行语法解析的压力。
实施例二
对应于上述实施例一,本发明实施例二提供了一种数据内生血缘关系的分析装置,相关的技术特征和对应的技术效果可参考上述实施例一的相关描述,该处不再赘述。图5为本发明实施例二提供的数据内生血缘关系的分析装置的框图,如图5所示,该装置包括:获取模块201、解析模块202、第一确定模块203、处理模块204和第二确定模块205。
其中,获取模块201用于获取数据库的SQL日志,其中,数据库包括多个数据表,数据表包括若干字段,SQL日志包括多条SQL语句;解析模块202用于对SQL语句进行语法解析,得到抽象语法树对象,其中,抽象语法树对象包括语法根节点和多个语法叶子节点,语法根节点为SQL语句,语法叶子节点为SQL语句中的语法结构;第一确定模块203用于确定语法叶子节点对应的信息,其中,当语法结构的语法包括操作时,语法叶子节点对应的信息包括操作的标识信息,当语法结构表征目的字段时,语法叶子节点对应的信息包括第一表达式,第一表达式包括目的字段的字段名和目的字段所在数据表的表名,当语法结构表征源字段时,语法叶子节点对应的信息包括第二表达式,第二表达式包括源字段的字段名和源字段所在的数据表的表名;处理模块204用于将语法叶子节点对应的信息作为血缘树中的节点,建立SQL语句对应的血缘树;第二确定模块205用于根据多条SQL语句对应的血缘树确定数据库中的数据内生血缘关系。
可选地,在一种实施例中,处理模块204包括:第一存储单元和建立单元,其中,存储单元用于按照由语法叶子节点到语法根节点的顺序,将语法叶子节点对应的信息存储至节点存储栈,其中,节点存储栈的出栈逻辑为先进先出;建立单元用于获取节点存储栈中的对象建立SQL语句对应的血缘树。
可选地,在一种实施例中,血缘树包括表征标识信息的中间节点、表征第一表达式或第二表达式的端节点,第二确定模块205包括:获取单元、第二存储单元和显示单元,其中,获取单元用于获取血缘树中两个端节点之间的路径,得到血缘路径;第二存储单元用于存储血缘路径的路径信息至血缘数据库,其中,路径信息包括所两个端节点、两个端节点之间的数据流向和两个端节点之间在血缘路径上的中间节点;显示单元用于显示血缘数据库中多条路径信息,以得到血缘图。
可选地,在一种实施例中,显示单元在显示血缘数据库中多条路径信息,以得到血缘图时,具体执行的步骤包括:将路径信息中的两个端节点映射为血缘图中的第一点和第二点,其中,路径信息的一个端节点中的表名映射为第一点的标注,路径信息的另一个端节点中的表名映射为第二点的标注;将路径信息中的两个端节点之间的数据流向映射为第一点和第二点之间的有向边;以及将路径信息中的中间节点映射为有向边的标注。
可选地,在一种实施例中,不同路径信息中具有相同表名的端节点映射为血缘图中的同一点。
可选地,在一种实施例中,数据内生血缘关系的分析装置还包括:缓存模块,用于在获取模块201获取数据库的SQL日志之后,解析模块202对SQL语句进行语法解析,得到抽象语法树对象之前,将多条SQL语句存储至消息缓存队列;其中,解析模块202在对SQL语句进行语法解析,得到抽象语法树对象时,具体执行的步骤包括:获取消息缓存队列中的消息进行语法解析,得到抽象语法树对象。
可选地,在一种实施例中,获取模块201在获取数据库的SQL日志时,具体执行的步骤包括:通过flume组件监控和收集数据库的SQL日志。
实施例三
本实施例三还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图6所示,本实施例的计算机设备01至少包括但不限于:可通过***总线相互通信连接的存储器011、处理器012,如图6所示。需要指出的是,图6仅示出了具有组件存储器011和处理器012的计算机设备01,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器011(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器011可以是计算机设备01的内部存储单元,例如该计算机设备01的硬盘或内存。在另一些实施例中,存储器011也可以是计算机设备01的外部存储设备,例如该计算机设备01上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器011还可以既包括计算机设备01的内部存储单元也包括其外部存储设备。本实施例中,存储器011通常用于存储安装于计算机设备01的操作***和各类应用软件,例如实施例二的数据内生血缘关系的分析装置的程序代码等。此外,存储器011还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器012在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器012通常用于控制计算机设备01的总体操作。本实施例中,处理器012用于运行存储器011中存储的程序代码或者处理数据,例如数据内生血缘关系的分析方法等。
实施例四
本实施例四还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储数据内生血缘关系的分析方装置,被处理器执行时实现实施例一的数据内生血缘关系的分析方法。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。