发明内容
基于此,有必要针对上述技术问题,提供一种能够提高精细度的血缘关系生成方法、装置、计算机设备、存储介质和计算机程序产品。
第一方面,本申请提供了一种血缘关系生成方法。所述方法包括:
获取用于生成目标表的表字段的数据库语句;所述数据库语句中包括第一层查询语句,所述第一层查询语句嵌套多层子语句;
解析所述第一层查询语句得到目标字段,确认所述表字段和所述目标字段之间的第一层血缘关系;
将第二层作为当前层;
解析所述当前层的子语句,得到所述当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;所述表别名为至少一个;
针对每个目标字段,从至少一个所述表别名中确定与所述目标字段的来源表相符的目标表别名,并从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段;
将所述血缘字段作为新的目标字段,并将所述当前层的下一层作为当前层,返回执行所述解析所述当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代;
基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到所述表字段和对应的最后一层血缘字段之间的字段血缘关系。
在其中一个实施例中,所述解析所述第一层查询语句得到目标字段包括:
确认所述第一层查询语句中的查询字段;
若所述第一层查询语句包括条件语句,确认所包括的条件语句所限定的条件字段;
将所述查询字段和所述条件字段作为所述目标字段。
在其中一个实施例中,所述解析所述当前层的子语句包括:若所述当前层的子语句包括条件语句,确认所包括的条件语句所限定的当前层条件字段;
所述从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段包括:
从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段;
将所述目标字段匹配的字段以及所述当前层条件字段作为与所述目标字段具有血缘关系的血缘字段。
在其中一个实施例中,所述表字段为多个,所述数据库语句的最外层是将所述表字段插入目标表的插入语句,所述确认所述表字段和所述目标字段之间的第一层血缘关系包括:
基于所述插入语句确定各所述表字段和所述表字段的索引位置;
从所述目标字段中确认与所述表字段的索引位置相同的字段,作为与所述表字段具有血缘关系的血缘字段;
基于多个表字段和对应的血缘字段得到第一层血缘关系。
在其中一个实施例中,所述得到与所述目标字段具有血缘关系的血缘字段之后,所述方法还包括:
若所述当前层的子语句的来源语句不包括下一层的子语句,确认所述来源语句的来源表为所述血缘字段的所属上游表;
所述方法还包括:
确认所述目标表和所述最后一层血缘字段的所属上游表存在表血缘关系;
基于所述表血缘关系得到与所述字段血缘关系相对应的数据血缘。
在其中一个实施例中,所述方法还包括:
建立结构化查询语言语句的语法树;
基于所述语法树,判断所述数据库语句是否包括查询结构;
若包括查询结构,则从所述数据库语句中提取查询语句作为所述第一层查询语句;
若不包括查询结构,从所述数据库语句中提取临时表信息和库名信息,所述临时表信息包括临时表和真实表的第一映射关系,所述库名信息包括真实表和库名的第二映射关系。
在其中一个实施例中,所述方法还包括:
基于所述字段血缘关系生成数据血缘;
若所述数据血缘所包括的上游表的名称为临时表的名称,则基于所述第一映射关系将所述上游表的名称替换为真实表的名称;
基于所述第二映射关系,在所述数据血缘中的真实表的名称前附加相应库名。
第二方面,本申请还提供了一种血缘关系生成装置。所述装置包括:
预处理模块,用于获取用于生成目标表的表字段的数据库语句;所述数据库语句中包括第一层查询语句,所述第一层查询语句嵌套多层子语句;解析所述第一层查询语句得到目标字段,确认所述表字段和所述目标字段之间的第一层血缘关系;将第二层作为当前层;
分层处理模块,用于解析所述当前层的子语句,得到所述当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;所述表别名为至少一个;针对每个目标字段,从至少一个所述表别名中确定与所述目标字段的来源表相符的目标表别名,并从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段;
迭代模块,用于将所述血缘字段作为新的目标字段,并将所述当前层的下一层作为当前层,返回执行所述解析所述当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代;
生成模块,用于基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到所述表字段和对应的最后一层血缘字段之间的字段血缘关系。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行上述血缘关系生成方法的步骤。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述血缘关系生成方法的步骤。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行上述血缘关系生成方法的步骤。
上述血缘关系生成方法、装置、计算机设备、存储介质和计算机程序产品,通过获取用于生成目标表的表字段的数据库语句,该数据库语句中包括嵌套多层子语句的第一层查询语句。解析第一层查询语句得到目标字段,确认表字段和目标字段之间的第一层血缘关系后,将第二层作为当前层以开始迭代。解析当前层的子语句,得到当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;该表别名为至少一个,从而服务器获取了当前层子语句的所有的表别名以及各个表别名中的字段。针对每个目标字段,从至少一个表别名中确定与目标字段的来源表相符的目标表别名,并从目标表别名中的当前层字段中确定与目标字段匹配的字段。因此在对数据库语句分层解析的过程中,就可以得到与目标字段具有血缘关系的血缘字段,并且有效地避免因为不同层具有相同的表别名名称所引发的混乱。将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回执行解析当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。基于在分层处理过程中所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到表字段和对应的最后一层血缘字段之间的字段血缘关系,从而得到字段级别的血缘关系,提高了血缘关系的精细度。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的血缘关系生成方法,可以应用于如图1所示的应用环境中。其中,终端110通过网络与服务器120进行通信。其中,终端110可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
终端110可以收集用于生成目标表的表字段的数据库语句,并发送给服务器120。服务器120获取用于生成目标表的表字段的数据库语句;数据库语句中包括嵌套多层子语句的第一层查询语句。服务器120解析第一层查询语句得到目标字段,确认表字段和目标字段之间的第一层血缘关系。服务器120将第二层作为当前层。服务器120解析当前层的子语句,得到当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;表别名为至少一个。服务器120针对每个目标字段,从至少一个表别名中确定与目标字段的来源表相符的目标表别名,并从目标表别名中的当前层字段中确定与目标字段匹配的字段,得到与目标字段具有血缘关系的血缘字段。服务器120将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回执行解析当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。服务器120基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到表字段和对应的最后一层血缘字段之间的字段血缘关系。服务器120可以将得到的字段血缘关系发送给终端110。
在一个实施例中,如图2所示,提供了一种血缘关系生成方法,本实施例以该方法应用于服务器进行举例说明,可以理解的是,该方法也可以应用于终端,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
S202,获取用于生成目标表的表字段的数据库语句;数据库语句中包括第一层查询语句,第一层查询语句嵌套多层子语句;解析第一层查询语句得到目标字段,确认表字段和目标字段之间的第一层血缘关系;将第二层作为当前层。
其中,数据库语句是指对数据库进行操作的语句;查询语句是数据库语句的一种类型,用于对已有表中的数据按照某种条件进行筛选,将满足条件的数据筛选出来形成一个新的记录集;字段是指数据库中表的列;表字段是数据库目标表的列;目标字段是与目标表中的表字段具有血缘关系的字段;
在一个实施例中,数据库语句的最外层是将表字段插入目标表的插入语句。服务器可以通过确认与插入语句中的表字段具有相同索引位置的目标字段,得到第一层血缘关系。比如,如图3所示的数据库语句,其中,该数据库语句的最外层是如300所示的插入语句,该插入语句用于表示将表字段“user_name”、“team_id”、“task_id”和“pro_name”插入到目标表“bmt_mtp.staff_vpn_info”中。图3还展示了多个嵌套的子语句,按照select语句(查询语句)的嵌套规则,301为第一层查询语句,302和303是嵌套的第二层子语句,304、305和306是嵌套的第三层子语句。服务器可以获取第一层查询语句和该插入语句的各个字段的索引位置,根据索引位置确认第一层血缘关系。
在一个实施例中,目标字段可以包括查询语句中所查询的字段和查询语句所使用的查询条件的字段等中的至少一种。服务器针对这两种字段进行去重复处理后得到目标字段。服务器可以确认第一层查询语句的条件语句中的字段,并作为具有第一层血缘关系的目标字段。比如,如301第一层查询语句所示,目标字段还可以包括条件语句“on a.task_id=b1.id”中的“task_id”和“id”这两个字段。
具体地,服务器可以获取用于生成目标表的表字段的数据库语句,该数据库语句中包括嵌套多层子语句的第一层查询语句。服务器可以解析第一层查询语句所查询的字段得到目标字段,还可以同时解析第一层查询语句的条件语句得到目标字段。服务器确认表字段和目标字段之间的第一层血缘关系,并将第一层查询语句所嵌套的第二层作为当前层,执行步骤S204、S204和S208的迭代过程。
S204,解析当前层的子语句,得到当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;表别名为至少一个。
其中,表别名可以将当前层子语句所查询的字段构成一个集合并进行标识以便于被上一层语句引用。比如,如304子语句中,所查询字段为“account”和“team_id”,这两个字段所构成的集合使用表别名为“a”进行标识,该表别名“a”被304的上一层子语句302引用。
在一个实施例中,当前层的子语句至少一个,一个子语句对应一个表别名或者不对应表别名。比如,306子语句不包括表别名,305子语句所查询的字段的集合构成表别名“c1”。
具体地,服务器解析当前层的所有子语句,子语句所查询的字段的集合可以使用表别名进行标识,服务器得到各个表别名中的字段作为当前层字段,以进行步骤S206的处理。
S206,针对每个目标字段,从至少一个表别名中确定与目标字段的来源表相符的目标表别名,并从目标表别名中的当前层字段中确定与目标字段匹配的字段,得到与目标字段具有血缘关系的血缘字段。
其中,血缘关系是指数据在产生、处理、流转到消亡过程中,数据之间形成的一种类似于人类社会血缘关系的关系。血缘字段用于表征是具有血缘关系的字段。
具体地,目标字段的来源表可以是来自于当前层子语句的表别名。服务器针对每个目标字段,从至少一个当前层子语句的表别名确认与目标字段的来源表相符的目标表别名。服务器从目标表别名中的当前层字段中,判断当前层字段的字段别名是否与目标字段名称相同、或者当前层字段的字段名称是否与目标字段名称相同,从而查找到与目标字段向匹配的字段,并将该匹配的字段确认为与目标字段具有血缘关系的血缘字段。
可以理解,在解析当前层子语句时,就可以得到与目标字段具有血缘关系的血缘字段。这样,在其它不同层具有相同表别名的情况下,血缘字段的获取只依据当前层的子语句中的表别名,不被其它层的相同表别名干扰,从而保证了血缘字段获取的准确性。
在一个实施例中,在得到与目标字段具有血缘关系的血缘字段的同时,服务器还可以将当前层的条件语句中的字段一同确认为与目标字段具有血缘关系的血缘字段。比如,如302子语句的“account”字段和条件语句中的“assignedTo”字段都可以是301第一层查询语句的“vpn_account”的血缘字段。
在一个实施例中,服务器可以基于每个目标字段的最后一层血缘字段的所属上游表,确认目标表和上游表存在表血缘关系。
S208,将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回执行解析当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。
具体地,服务器将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回重新执行S204进行迭代处理,以使得在逐层剥开所嵌套的子语句过程中,得到两两相邻层之间的血缘关系,直至最后一层的子语句确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。
如图4所示,展示了逐层剥开图3所示的嵌套语句的过程中,所生成的信息分层图。其中,确认300插入语句为第零层,第零层包括了插入字段信息“user_name”、“team_id”、“task_id”和“Pro_name”。301第一层查询语句包括了查询字段信息(字段和所属临时表)“a.vpn_account”、“a.team_id”、“a.task_id”和“b1.status”,条件信息“a.task_id”和“b1.id”。以此类推,不一一描述。其中,第二层的302子语句的查询字段构成表别名“a”、第二层的303子语句的查询字段构成表别名“b1”。以此类推,不一一描述。第二层的303的上游表为“edw_ods.zto_zt_task”,该上游表对应的表别名为a1等。可以理解,服务器在逐层剥开子语句进行分层处理的过程中,处理当前层子语句时,就能获取与目标字段具有血缘关系的血缘字段,从而在处理最后一层时,得到两两相邻层之间的血缘关系。比如,处理第二层的时候,就可以确认301第一层查询语句中的目标字段和第二层子语句302和303中的字段之间的血缘关系,在处理最后一层、即第三层时,就可以确认第二层和第三层之间的血缘关系。
S210,基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到表字段和对应的最后一层血缘字段之间的字段血缘关系。
具体地,服务器逐个选择表字段,根据第一层血缘关系,确认第一层查询语句中与表字段具有血缘关系的的第一血缘字段,根据第一层和第二层之间的血缘关系,确认第二层子语句中的与第一血缘字段具有血缘关系的第二血缘字段,以此类推,得到最后一层血缘字段,即目标表字段和最后一层血缘字段具有字段血缘关系。
比如,如图5所示,图5在图4的基础上,展示了目标字段“user_name”血缘关系生成示意图。对服务器确认501所连接的相邻两层的字段具有血缘关系,502所连接的相邻两层的字段具有血缘关系,503所连接的相邻两层的字段具有血缘关系,从而确认第零层的“user_name”与第三层“account”具有字段血缘关系。
在一个实施例中,服务器还可以获取最后一层血缘字段的来源表,从而确认表血缘关系。比如,如图5所示,504所连接的两端表示304子语句中的“account”字段的来源表为“edw_ods.vpn_work_time”(edw_ods是库名,vpn_work_time是表名),从而确认300子语句中的字段“user_name”与304子语句的“vpn_work_time”表的“account”字段具有字段血缘关系,从而确认目标表“bmt_mtp.staff_vpn_info”和304子语句中的“edw_ods.vpn_work_time”具有表血缘关系。
在一个实施例中,服务器可以基于语法数据确认数据库语句是否具有查询语句,并且提取临时表信息和库名信息。
在一个实施例中,服务器可以基于字段血缘关系和获取的上游表信息,生成目标表的数据血缘。
在一个实施例中,服务器可以基于临时表信息和库名信息,对数据血缘中的表信息进行替换,得到具有真实表名称和库名信息的数据血缘。
上述血缘关系生成方法,通过获取用于生成目标表的表字段的数据库语句,该数据库语句中包括嵌套多层子语句的第一层查询语句。解析第一层查询语句得到目标字段,确认表字段和目标字段之间的第一层血缘关系后,将第二层作为当前层以开始迭代。解析当前层的子语句,得到当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;该表别名为至少一个,从而服务器获取了当前层子语句的所有的表别名以及各个表别名中的字段。针对每个目标字段,从至少一个表别名中确定与目标字段的来源表相符的目标表别名,并从目标表别名中的当前层字段中确定与目标字段匹配的字段。因此在对数据库语句分层解析的过程中,就可以得到与目标字段具有血缘关系的血缘字段,并且有效地避免因为不同层具有相同的表别名名称所引发的混乱。将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回执行解析当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。基于在分层处理过程中所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到表字段和对应的最后一层血缘字段之间的字段血缘关系,从而得到字段级别的血缘关系,提高了血缘关系的精细度。并且,基于分层处理机制的迭代过程还提高了血缘关系的准确率。
在一个实施例中,所述解析所述第一层查询语句得到目标字段包括:确认所述第一层查询语句中的查询字段;若所述第一层查询语句包括条件语句,确认所包括的条件语句所限定的条件字段;将所述查询字段和所述条件字段作为所述目标字段。
具体地,服务器从第一层查询语句得到查询字段,并作为目标字段。若第一层查询语句还包括条件语句,将该条件语句中所限定的条件字段也作为目标字段。比如,如301所示的第一层查询语句,根据301中的条件语句“on a.task_id=b1.id”,可以确认所限定的条件字段为“a.task_id”和“b1.id”,服务器可以将条件字段作为目标字段。
在本实施例中,通过将条件语句中所限定的条件字段作为目标字段,可以获取针对表字段获取更精细的血缘字段,从而提高生成的血缘关系的精细度。
在一个实施例中,所述解析所述当前层的子语句包括:若所述当前层的子语句包括条件语句,确认所包括的条件语句所限定的当前层条件字段;所述从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段包括:从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段;将所述目标字段匹配的字段以及所述当前层条件字段作为与所述目标字段具有血缘关系的血缘字段。
具体地,若所述当前层的子语句包括条件语句,服务器得到所包括的条件语句所限定的当前层条件字段。服务器从至少一个表别名中确定与目标字段的来源表相符的目标表别名后,从目标表别名中的当前层字段中确定与目标字段匹配的字段。服务器将所述目标字段匹配的字段以及所述当前层条件字段作为与所述目标字段具有血缘关系的血缘字段。
在本实施例中,通过将当前层条件字段,作为与目标字段具有血缘关系的血缘字段,将查询语句中的条件语句所限定的条件字段纳入血缘字段,从而提高生成的血缘关系的精细度。
在一个实施例中,所述表字段为多个,所述数据库语句的最外层是将所述表字段插入目标表的插入语句,所述确认所述表字段和所述目标字段之间的第一层血缘关系包括:基于所述插入语句确定各所述表字段和所述表字段的索引位置;从所述目标字段中确认与所述表字段的索引位置相同的字段,作为与所述表字段具有血缘关系的血缘字段;基于多个表字段和对应的血缘字段得到第一层血缘关系。
具体地,表字段可以为多个,数据库语句的最外层可以是将表字段插入目标表的插入语句。在确认表字段和目标字段之间的第一层血缘关系的过程中,服务器对插入语句进行解析,确定各个表字段和各个表字段的索引位置。服务器从目标字段中确认与表字段的索引位置相同的字段,作为与表字段具有血缘关系的血缘字段。服务器针对各个表字段进行同样的处理,从而得到各个表字段和对应的血缘字段,从而得到第一层血缘关系。
在本实施例中,通过将基于插入语句确定各表字段和表字段的索引位置;从目标字段中确认与所述表字段的索引位置相同的字段,作为与表字段具有血缘关系的血缘字段,并基于多个表字段和对应的血缘字段得到第一层血缘关系。因此,服务器可以获取到插入语句和第一层查询语句之间的血缘关系,后续针对查询语句进行迭代处理,最终可以生成从表字段到最后一层血缘字段之间的字段级别的字段血缘关系,从而提高了血缘关系的精细度。
在一个实施例中,所述得到与所述目标字段具有血缘关系的血缘字段之后,所述方法还包括:若所述当前层的子语句的来源语句不包括下一层的子语句,确认所述来源语句的来源表为所述血缘字段的所属上游表;所述方法还包括:确认所述目标表和所述最后一层血缘字段的所属上游表存在表血缘关系;基于所述表血缘关系得到与所述字段血缘关系相对应的数据血缘。
其中,表血缘关系是用于表示表之间的血缘关系;数据血缘包括字段血缘关系和表血缘关系,展示了目标表的字段来自于哪个来源表和来源表的哪个字段。
具体地,服务器在得到与目标字段具有血缘关系的血缘字段后,服务器还可以判断当前层的子语句的来源语句是否包括下一层的子语句。若不包括下一层的子语句,服务器可以从来源语句获取来源表,并确认血缘字段的所属表名称和来源表的名称是否匹配,若匹配,则将来源表名称确认为血缘字段的所属上游表。进一步地,服务器可以确认目标表和最后一层血缘关系的所属上游表存在表血缘关系,从而生成与字段血缘关系相对应的数据血缘。
在本实施例中,通过对上游表的获取,并进一步确认目标表和最后一层血缘字段的所属上游表存在表血缘关系;基于表血缘关系得到与字段血缘关系相对应的数据血缘。这样,服务器就就可以生成数据血缘,该数据血缘展示目标表的字段来自于哪个来源表和来源表的哪个字段,该数据血缘不止展示了表之间的血缘关系,还展示了表中的字段之间的血缘关系,从而提高了数据血缘的精细度。
在一个实施例中,所述方法还包括:建立结构化查询语言语句的语法树;基于所述语法树,判断所述数据库语句是否包括查询结构;若包括查询结构,则从所述数据库语句中提取查询语句作为所述第一层查询语句;若不包括查询结构,从所述数据库语句中提取临时表信息和库名信息,所述临时表信息包括临时表和真实表的第一映射关系,所述库名信息包括真实表和库名的第二映射关系。
其中,语法树是数据库语句的句子结构的图形表示,有利于理解句子语法结构的层次。临时表是建立在系统临时文件夹中的表,可以是一个大量数据的小的子集,在使用得当的情况下,可以像普通表一样进行各种操作。库名是数据库名称,是创建数据库时所命名的标识名字。
具体地,服务器建立结构化查询语言语句的语法树。基于该语法树,服务器判断数据库语句是否包括查询结构。若包括查询结构,服务器则从数据库语句中提取查询语句作为所述第一层查询语句。若不包括查询结构,从所述数据库语句中提取包括临时表和真实表的第一映射关系的临时表信息,提取包括真实表和库名的第二映射关系的库名信息。若提取成功,服务器则将存储临时表信息和库名信息。
在本实施例中,通过基于语法树确认数据库语句是否包括查询结构,提高了对查询结构的判断的准确性,服务器还提取包括临时表和真实表的第一映射关系的临时表信息以及包括真实表和库名的第二映射关系的库名信息,从而为生成包含更多信息量的数据血缘做好准备。
在一个实施例中,所述方法还包括:基于所述字段血缘关系生成数据血缘;若所述数据血缘所包括的上游表的名称为临时表的名称,则基于所述第一映射关系将所述上游表的名称替换为真实表的名称;基于所述第二映射关系,在所述数据血缘中的真实表的名称前附加相应库名。
具体地,服务器基于字段血缘关系生成数据血缘后,服务器对生成的数据血缘进行检查,若数据血缘所包括的上游表的名称为临时表的名称,则基于所述第一映射关系将所述上游表的名称替换为真实表的名称。服务器还可以基于所述第二映射关系,在所述数据血缘中的真实表的名称前附加相应库名。
在本实施例中,服务器基于所述第一映射关系将上游表的名称替换为真实表的名称;基于第二映射关系,在数据血缘中的真实表的名称前附加相应库名,从而生成了包含更多有效信息量的数据血缘,便于对数据血缘进行分析。
在一个实施例中,目标表的上游血缘可以包括目标表的上游表和上游字段。具体地,服务器可以在获取到目标表的上游血缘之后,以上游血缘所包括的上游表作为新的目标表,执行本方法,获取新的目标表的上游血缘,以此进行类推,从而得到与目标表相关的多个上游血缘,串接所有的上游血缘,从而生成整体数据血缘。比如,如图6所示(只展示其中一级上下游),服务器针对表B执行本方法,确认表B的上游表为表A,表B的字段B1和字段B2的上游对应字段为字段A1,服务器针对表C执行本方法,确认表C的上游表为表A,表C的字段C1和字段C2的上游对应字段为字段A2;服务器将上游表A确认为本方法的目标表,针对上游表A确认表A的上游表为表D,表A的字段A1的上游对应字段为表D的字段D1和字段D2。服务器基于表B、表C和表A各自的上游血缘,拼接生成的如图7所示的一部分整体数据血缘。
在一个实施例中,服务器可以基于表名清单,分别针对表名清单中的各个表执行本方法,获取到各个表的上游血缘后,串接所有的上游血缘,生成整体数据血缘。具体地,如图7所示,服务器获取到待处理的表名清单后,取出一个表名作为目标表,并通过表名获取对应的加工数据库操作语句集合。其中,加工数据库操作语句是用来创建目标表的字段的数据库操作语句,在服务器的数据仓库中,每个目标表都有对应的加工数据库操作语句集合。服务器针对目标表的加工数据库操作语句集合进行清洗,把注释语句、变更表结构语句、删除数据语句及不支持解析的语法等不涉及数据血缘信息的数据库操作语句清理掉,以提高数据库操作语句解析的准确度和效率。然后服务器针对清洗后的目标表的加工数据库操作语句集合进行解析,针对该集合中的每个数据库操作语句执行本方法,得到目标表的上游数据并存储到数据库中。服务器针对表名清单的各个表进行遍历,逐个执行本实施例的步骤,如果遍历完毕,则基于表名清单中的各个表的上游血缘生成整体数据血缘。
在一个实施例中,图8展示了图7中的解析加工数据库操作语句集合的步骤的流程。具体地,服务器基于语法树提取查询结构。具体地,服务器获取到加工数据库操作语句集合中所包含的连续多个数据库操作语句,按切分规则切分连续多个数据库操作语句。比如,按照“;\n”(英文分号和换行符)切分,得到每个数据库操作语句。服务器将每个数据库操作语句放入数据库操作语句数组中。服务器遍历数据库操作语句数组,取其中一个数据库操作语句,利用现有工具转换为语法树。服务器器通过语法树结构判断数据库操作语句是否包括查询结构,如果包括查询结构,则提取查询结构,针对该数据库操作语句执行本方法。如果不包括查询结构,提取相应数据,包括创建的临时表和使用的库名等数据。服务器针对该数据库操作语句处理完毕后,将数据库操作语句数组中的数据库操作语句进行遍历,逐个执行本实施例的步骤,直到遍历完毕。服务器根据各个解析结果进行整合输出,得到加工数据库操作语句集合的上游血缘。
在一个实施例中,服务器基于语法树,确认数据库语句包括查询结构,确认第零层为插入语句,目标表的表字段为插入字段,并获取插入字段和插入字段的索引位置。服务器对第一层查询结构进行解析,得到目标字段,并判断字段的索引位置是否相同,得到表字段和目标字段之间的第一层血缘关系。服务器将第二层作为当前层,开始迭代处理。具体的迭代过程如下:服务器解析当前层的子语句,得到所述当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;所述表别名为至少一个;针对每个目标字段,从至少一个所述表别名中确定与所述目标字段的来源表相符的目标表别名,并从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段。服务器还可以将当前层的条件字段作为血缘字段。将所述血缘字段作为新的目标字段,并将所述当前层的下一层作为当前层,返回执行所述解析所述当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。最后,服务器基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到所述表字段和对应的最后一层血缘字段之间的字段血缘关系。服务器在迭代过程中还可以获取血缘字段的上游表,从而得到表血缘关系,再根据字段血缘关系和表血缘关系生成数据血缘。
应该理解的是,虽然本申请部分实施例中的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的血缘关系生成方法的血缘关系生成装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个血缘关系生成装置实施例中的具体限定可以参见上文中对于血缘关系生成方法的限定,在此不再赘述。
在一个实施例中,如图9所示,提供了一种血缘关系生成装置900,包括:预处理模块902、分层处理模块904、迭代模块906和生成模块908,其中:
预处理模块902,用于获取用于生成目标表的表字段的数据库语句;数据库语句中包括第一层查询语句,第一层查询语句嵌套多层子语句;解析第一层查询语句得到目标字段,确认表字段和目标字段之间的第一层血缘关系;将第二层作为当前层。
分层处理模块904,用于解析当前层的子语句,得到当前层的子语句所对应的表别名中的字段;将得到的字段作为当前层字段;表别名为至少一个;针对每个目标字段,从至少一个表别名中确定与目标字段的来源表相符的目标表别名,并从目标表别名中的当前层字段中确定与目标字段匹配的字段,得到与目标字段具有血缘关系的血缘字段。
迭代模块906,用于将血缘字段作为新的目标字段,并将当前层的下一层作为当前层,返回执行解析当前层的子语句的步骤,直至从最后一层的子语句中确定与相邻层的目标字段具有血缘关系的血缘字段后停止迭代。
生成模块908,用于基于所确定的各个相邻层中的血缘字段之间的血缘关系以及第一层血缘关系,得到表字段和对应的最后一层血缘字段之间的字段血缘关系。
在一个实施例中,预处理模块902还用于:确认所述第一层查询语句中的查询字段;若所述第一层查询语句包括条件语句,确认所包括的条件语句所限定的条件字段;将所述查询字段和所述条件字段作为所述目标字段。
在一个实施例中,分层处理模块904还用于:若所述当前层的子语句包括条件语句,确认所包括的条件语句所限定的当前层条件字段;所述从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段,得到与所述目标字段具有血缘关系的血缘字段包括:从所述目标表别名中的当前层字段中确定与所述目标字段匹配的字段;将所述目标字段匹配的字段以及所述当前层条件字段作为与所述目标字段具有血缘关系的血缘字段。
在一个实施例中,所述表字段为多个,所述数据库语句的最外层是将所述表字段插入目标表的插入语句,预处理模块902还用于基于所述插入语句确定各所述表字段和所述表字段的索引位置;从所述目标字段中确认与所述表字段的索引位置相同的字段,作为与所述表字段具有血缘关系的血缘字段;基于多个表字段和对应的血缘字段得到第一层血缘关系。
在一个实施例中,所述得到与所述目标字段具有血缘关系的血缘字段之后,所述方法还包括:若所述当前层的子语句的来源语句不包括下一层的子语句,确认所述来源语句的来源表为所述血缘字段的所属上游表;所述方法还包括:确认所述目标表和所述最后一层血缘字段的所属上游表存在表血缘关系;基于所述表血缘关系得到与所述字段血缘关系相对应的数据血缘。
在一个实施例中,血缘关系生成装置900还用于建立结构化查询语言语句的语法树;基于所述语法树,判断所述数据库语句是否包括查询结构;若包括查询结构,则从所述数据库语句中提取查询语句作为所述第一层查询语句;若不包括查询结构,从所述数据库语句中提取临时表信息和库名信息,所述临时表信息包括临时表和真实表的第一映射关系,所述库名信息包括真实表和库名的第二映射关系。
在一个实施例中,血缘关系生成装置900还用于基于所述字段血缘关系生成数据血缘;若所述数据血缘所包括的上游表的名称为临时表的名称,则基于所述第一映射关系将所述上游表的名称替换为真实表的名称;基于所述第二映射关系,在所述数据血缘中的真实表的名称前附加相应库名。
关于上述血缘关系生成装置的具体限定可以参见上文中对于上述血缘关系生成方法的限定,在此不再赘述。上述血缘关系生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据库语句数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种血缘关系生成方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种血缘关系生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10和图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。