用于数据血缘的解析方法、存储介质及处理器技术

技术编号:38660901 阅读:12 留言:0更新日期:2023-09-02 22:44
本申请实施例提供一种用于数据血缘的解析方法、处理器及存储介质。解析方法包括:获取待解析的结构化查询语言脚本,结构化查询语言脚本至少包括一个结构化查询语句;对结构化查询语言脚本进行解析,以生成与结构化查询脚本对应的抽象语法树,其中,抽象语法树包括不同类型的标识和标识列表;采用分段式搜索方式拆分抽象语法树,以得到抽象语法树的多个子语句;根据多个子语句确定抽象语法树包含的血缘数据目标表和标识符;在抽象语法树拆分完毕的情况下,根据血缘数据目标表和标识符对抽象语法树进行解析以得到结构化查询语言脚本的血缘数据。缘数据。缘数据。

【技术实现步骤摘要】
用于数据血缘的解析方法、存储介质及处理器


[0001]本申请涉及计算机数据处理
,具体涉及一种用于数据血缘的解析方法、存储介质及处理器。

技术介绍

[0002]工程机械行业的数据血缘需求主要来源于工程机械行业数据仓库运维过程。在数据仓库运维过程中,数据仓库任务失败后的任务恢复需要明确当前任务的上下游依赖,数据仓库字段的逻辑变更同样也影响着下游库表,变更逻辑后需及时通知下游。因此,如何发现数据的引用链与影响链即血缘数据关系成为数据仓库面临的共同问题。
[0003]目前,传统方法主要通过使用离线解析与在线解析相结合的方式,来获得SQL脚本内的血缘数据,其中包含的预解析的过程会使得实际解析流程中会存在两次解析,需要耗费大量的时间。且目前的离线解析方法无法获取表或字段的元数据,无法处理SQL脚本中有*的情况。

技术实现思路

[0004]本申请实施例的目的是提供一种用于数据血缘的解析方法、存储介质及处理器。
[0005]为了实现上述目的,本申请第一方面提供一种用于数据血缘的解析方法,包括:
[0006]获取待解析的结构化查询语言脚本,结构化查询语言脚本至少包括一个结构化查询语句;
[0007]对结构化查询语言脚本进行解析,以生成与结构化查询脚本对应的抽象语法树,其中,抽象语法树包括不同类型的标识和标识列表;
[0008]采用分段式搜索方式拆分抽象语法树,以得到抽象语法树的多个子语句;
[0009]根据多个子语句确定抽象语法树包含的血缘数据目标表和标识符;r/>[0010]在抽象语法树拆分完毕的情况下,根据血缘数据目标表和标识符对抽象语法树进行解析以得到结构化查询语言脚本的血缘数据。
[0011]在一个实施例中,标识至少包括第一类型关键字、第二类型关键字、第一关键字、第二关键字以及第三关键字,采用分段式搜索方式拆分抽象语法树,以得到抽象语法树的多个子语句包括:判断抽象语法树的第一个层级的标识是否为第一类型关键字;在第一个层级的标识是第一类型关键字的情况下,将抽象语法树拆分为第一类型子句和第二类型子句,其中,第一类型子句是由第一字节和第二字节构成的子句;将第一类型子句中位于第一字节之后的部分确定为第一标识符,并根据第一标识符确定第一类型子句的第一血缘数据目标表,并将第一类型子句中位于第二字节之后的子查询内的结构化查询语句确定为第一联合查询子句;根据第一联合查询子句中包括第一关键字的情况对抽象语法树进行拆分。
[0012]在一个实施例中,解析方法还包括:在第一个层级的标识不是第一类型关键字的情况下,确定第一个层级的标识为第二类型关键字;将第二类型子句之后出现的第一个标识符确定为第二类型子句的第二血缘数据目标表;根据第二类型子句中包括第一关键字的
情况对抽象语法树进行拆分。
[0013]在一个实施例中,第一关键字为联合查询关键字,根据第一联合查询子句中包括第一关键字的情况对抽象语法树进行拆分包括:在第一联合查询子句中包括联合查询关键字的情况下,判断第一联合查询子句后的第一个选择关键字是否位于第一个联合查询关键字之前;在第一联合查询子句后的第一个选择关键字位于第一个联合查询关键字之前的情况下,将第一个选择关键字与第一个联合查询关键字之间的标识组合为第一个联合查询子句;在第一联合查询子句后的第一个选择关键字位于第一个联合查询关键字之后的情况下,将第一个联合查询关键字之前的第一个标识符或子查询确定为第一个联合查询子句,并将每个联合查询关键字之间以及最后一个联合查询关键字之后的标识确定为其他的联合查询子句;将第一个联合查询子句和其他的联合查询子句均转换为以选择关键字为开头的第一选择子句,并将第一血缘数据目标表确定为第一选择子句的第三血缘数据目标表;判断第一选择子句中第一个标识是否为选择关键字,以根据第一个标识的情况对抽象语法树进行拆分。
[0014]在一个实施例中,解析方法还包括:在第一联合查询子句中不包括联合查询关键字的情况下,获取第一联合查询子句后的第一个选择关键字;将第一联合查询子句后的第一个选择关键字与第一联合查询子句后的第一个选择关键字之后的标识列表确定为第二选择子句;判断第二选择子句中的第一个标识是否为选择关键字,以根据第一个标识的情况对抽象语法树进行拆分。
[0015]在一个实施例中,第一关键字为联合查询关键字,根据第二类型子句中包括第一关键字的情况对抽象语法树进行拆分包括:在第二类型子句中包括联合查询关键字的情况下,判断第二类型子句后的第一个选择关键字是否位于第一个联合查询关键字之前;在第二类型子句后的第一个选择关键字位于第一个联合查询关键字之前的情况下,将第一个选择关键字与第一个联合查询关键字之间的标识组合为第一个联合查询子句;在第二类型子句后的第一个选择关键字位于第一个联合查询关键字之后的情况下,将第一个联合查询关键字之前的第一个标识符或子查询确定为第一个联合查询子句,并将位于每个联合查询关键字之间以及最后一个联合查询关键字之后的标识确定为其他的联合查询子句;将第一个联合查询子句和其他的联合查询子句均转换为以选择关键字为开头的第三选择子句,并将第二血缘数据目标表确定为第二选择子句的第四血缘数据目标表;判断第三选择子句中的第一个标识是否为选择关键字,以根据第一个标识的情况对抽象语法树进行拆分。
[0016]在一个实施例中,解析方法还包括:在第二类型子句中不包括联合查询关键字的情况下,获取第二类型子句后的第一个选择关键字;将第二类型子句后的第一个选择关键字与第二类型子句后的第一个选择关键字之后的标识列表确定为第四选择子句;判断第四选择子句中的第一个标识是否为选择关键字,以根据第一个标识的情况对抽象语法树进行拆分。
[0017]在一个实施例中,根据第一个标识的情况对抽象语法树进行拆分包括:在第一个标识是选择关键字的情况下,将位于选择关键字与第二关键字之间的子句确定为字段域子句,并获取字段域子句中包含的第二标识符;判断第二关键字之后的标识列表是否包括第三关键字;在第二关键字之后的标识列表包括第三关键字的情况下,将位于第二关键字与第三关键字之间的子句确定为等值连接子句;在第二关键字之后的标识列表不包括第三关
键字的情况下,将位于第二关键字之后的标识符确定为表检索子句。
[0018]在一个实施例中,解析方法还包括:在第一个标识不是选择关键字的情况下,确定抽象语法树的第一层级拆分完毕;根据字段域子句确定结构化查询语言脚本的血缘数据。
[0019]在一个实施例中,血缘数据包括列级血缘数据,根据字段域子句确定结构化查询语言脚本的血缘数据包括:判断字段域子句中的标识符是否存在别名;在字段域子句中的标识符存在别名的情况下,将存在别名的标识符的当前位置和别名与第一血缘数据目标表、第二血缘数据目标表、第三血缘数据目标表以及第四血缘数据目标表中的任意一者组合为列级血缘的右列;在字段域子句中的标识符不存在别名的情况下,将字段域子句中的标识符的字段名与第一血缘数据目标表、第二血缘数据目标表、第三血缘数据目标表以及第四血缘数据目本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种用于数据血缘的解析方法,其特征在于,所述解析方法包括:获取待解析的结构化查询语言脚本,所述结构化查询语言脚本至少包括一个结构化查询语句;对所述结构化查询语言脚本进行解析,以生成与所述结构化查询脚本对应的抽象语法树,其中,所述抽象语法树包括不同类型的标识和标识列表;采用分段式搜索方式拆分所述抽象语法树,以得到所述抽象语法树的多个子语句;根据所述多个子语句确定所述抽象语法树包含的血缘数据目标表和标识符;在所述抽象语法树拆分完毕的情况下,根据所述血缘数据目标表和所述标识符对所述抽象语法树进行解析以得到所述结构化查询语言脚本的血缘数据。2.根据权利要求1所述的用于数据血缘的解析方法,其特征在于,所述标识至少包括第一类型关键字、第二类型关键字、第一关键字、第二关键字以及第三关键字,所述采用分段式搜索方式拆分所述抽象语法树,以得到所述抽象语法树的多个子语句包括:判断所述抽象语法树的第一个层级的标识是否为所述第一类型关键字;在所述第一个层级的标识是所述第一类型关键字的情况下,将所述抽象语法树拆分为所述第一类型子句和所述第二类型子句,其中,所述第一类型子句是由第一字节和第二字节构成的子句;将所述第一类型子句中位于所述第一字节之后的部分确定为第一标识符,并根据所述第一标识符确定所述第一类型子句的第一血缘数据目标表,并将所述第一类型子句中位于所述第二字节之后的子查询内的结构化查询语句确定为第一联合查询子句;根据所述第一联合查询子句中包括第一关键字的情况对所述抽象语法树进行拆分。3.根据权利要求2所述的用于数据血缘的解析方法,其特征在于,所述解析方法还包括:在所述第一个层级的标识不是所述第一类型关键字的情况下,确定所述第一个层级的标识为第二类型关键字;将所述第二类型子句之后出现的第一个标识符确定为所述第二类型子句的第二血缘数据目标表;根据所述第二类型子句中包括第一关键字的情况对所述抽象语法树进行拆分。4.根据权利要求2所述的用于数据血缘的解析方法,其特征在于,所述第一关键字为联合查询关键字,所述根据所述第一联合查询子句中包括第一关键字的情况对所述抽象语法树进行拆分包括:在所述第一联合查询子句中包括所述联合查询关键字的情况下,判断所述第一联合查询子句后的第一个选择关键字是否位于所述第一个联合查询关键字之前;在所述第一联合查询子句后的第一个选择关键字位于所述第一个联合查询关键字之前的情况下,将所述第一个选择关键字与所述第一个联合查询关键字之间的标识组合为第一个联合查询子句;在所述第一联合查询子句后的第一个选择关键字位于所述第一个联合查询关键字之后的情况下,将所述第一个联合查询关键字之前的第一个标识符或子查询确定为第一个联合查询子句,并将每个联合查询关键字之间以及最后一个联合查询关键字之后的标识确定为其他的联合查询子句;
将所述第一个联合查询子句和所述其他的联合查询子句均转换为以选择关键字为开头的第一选择子句,并将所述第一血缘数据目标表确定为所述第一选择子句的第三血缘数据目标表;判断所述第一选择子句中第一个标识是否为选择关键字,以根据所述第一个标识的情况对所述抽象语法树进行拆分。5.根据权利要求4所述的用于数据血缘的解析方法,其特征在于,所述解析方法还包括:在所述第一联合查询子句中不包括联合查询关键字的情况下,获取所述第一联合查询子句后的第一个选择关键字;将所述第一联合查询子句后的第一个选择关键字与所述第一联合查询子句后的第一个选择关键字之后的标识列表确定为第二选择子句;判断所述第二选择子句中的第一个标识是否为选择关键字,以根据所述第一个标识的情况对所述抽象语法树进行拆分。6.根据权利要求3所述的用于数据血缘的解析方法,其特征在于,所述第一关键字为联合查询关键字,所述根据所述第二类型子句中包括第一关键字的情况对所述抽象语法树进行拆分包括:在所述第二类型子句中包括所述联合查询关键字的情况下,判断所述第二类型子句后的第一个选择关键字是否位于所述第一个联合查询关键字之前;在所述第二类型子句后的第一个选择关键字位于所述第一个联合查询关键字之前的情况下,将所述第一个选择关键字与所述第一个联合查询关键字之间的标识组合为第一个联合查询子句;在所述第二类型子句后的第一个选择关键字位于所述第一个联合查询关键字之后的情况下,将所述第一个联合查询关键字之前的第一个标识符或子查询确定为第一个联合查询子句,并将位于每个联合查询关键字之间以及最后一个联合查询关键字之后的标识确定为其他的联合查询子句;将所述第一个联合查询子句和所述其他的联合查询子句均转换为以选...

【专利技术属性】
技术研发人员:曾光王晓军左跃飞傅军康丹艺赵芳芳
申请(专利权)人:中科云谷科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1