一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

脚本质量检测方法以及相关设备与流程

2022-12-31 19:33:45 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体涉及一种脚本质量检测方法以及相关设备。


背景技术:

2.对于开发人员来说,不同开发人员撰写代码的习惯、风格和水平都有所差异。代码的质量影响着软件系统的质量,因此需要对代码进行质量检测,避免代码质量问题流入生产环境中引起生产事故。
3.在目前的相关技术中,通常是通过传统的人工评审方式去发现代码质量问题,而大数据脚本逻辑复杂,需要层层穿透深入分析才能发现问题,而且部分脚本质量问题种类多,难以标准化识别,因此需要有丰富数据开发经验的工程师消耗较长的时间进行人工排查才能发现问题,这使得质量检测效率较低,耗费大量人力,同时这种质量检测方式也很容易遗漏发现问题,最终导致问题流入生产环境导致生产事故。


技术实现要素:

4.本技术实施例提供一种脚本质量检测方法以及相关设备,相关设备可以包括脚本质量检测装置、电子设备、计算机可读存储介质和计算机程序产品,可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
5.本技术实施例提供一种脚本质量检测方法,包括:
6.获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;
7.针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;
8.获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;
9.根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
10.相应的,本技术实施例提供一种脚本质量检测装置,包括:
11.脚本获取单元,用于获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;
12.解析单元,用于针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;
13.规则获取单元,用于获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;
14.检测单元,用于根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
15.本技术实施例提供的一种电子设备,包括处理器和存储器,所述存储器存储有多
条指令,所述处理器加载所述指令,以执行本技术实施例提供的脚本质量检测方法中的步骤。
16.本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现本技术实施例提供的脚本质量检测方法中的步骤。
17.此外,本技术实施例还提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现本技术实施例提供的脚本质量检测方法中的步骤。
18.本技术实施例提供了一种脚本质量检测方法以及相关设备,可以获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。本技术可以通过对待检测脚本进行解析,并利用质量规则来对解析结果进行质量检测,这样可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
附图说明
19.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1a是本技术实施例提供的脚本质量检测方法的场景示意图;
21.图1b是本技术实施例提供的脚本质量检测方法的流程图;
22.图1c是本技术实施例提供的脚本质量检测方法的另一流程图;
23.图1d是本技术实施例提供的脚本质量检测方法的另一流程图;
24.图1e是本技术实施例提供的脚本质量检测方法的说明图;
25.图2是本技术实施例提供的脚本质量检测方法的另一流程图;
26.图3是本技术实施例提供的脚本质量检测装置的结构示意图;
27.图4是本技术实施例提供的电子设备的结构示意图。
具体实施方式
28.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
29.本技术实施例提供一种脚本质量检测方法以及相关设备,相关设备可以包括脚本质量检测装置、电子设备、计算机可读存储介质和计算机程序产品。该脚本质量检测装置具体可以集成在电子设备中,该电子设备可以是终端或服务器等设备。
30.可以理解的是,本实施例的脚本质量检测方法可以是在终端上执行的,也可以是在服务器上执行,还可以由终端和服务器共同执行的。以上举例不应理解为对本技术的限
制。
31.如图1a所示,以终端和服务器共同执行脚本质量检测方法为例。本技术实施例提供的脚本质量检测系统包括终端10和服务器11等;终端10与服务器11之间通过网络连接,比如,通过有线或无线网络连接等,其中,脚本质量检测装置可以集成在服务器中。
32.其中,服务器11,可以用于:获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。其中,服务器11可以是单台服务器,也可以是由多个服务器组成的服务器集群或云服务器。
33.其中,终端10,可以用于:向服务器11发送待检测脚本,以使服务器11对所述待检测脚本进行质量检测,并接收服务器11发送的所述待检测脚本的质量检测结果。其中,终端10可以包括手机、智能电视、平板电脑、笔记本电脑、或个人计算机(pc,personal computer)等。终端10上还可以设置客户端,该客户端可以是应用程序客户端或浏览器客户端等等。
34.以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
35.本实施例将从脚本质量检测装置的角度进行描述,该脚本质量检测装置具体可以集成在电子设备中,该电子设备可以是服务器或终端等设备。
36.如图1b所示,该脚本质量检测方法的具体流程可以如下:
37.101、获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表。
38.其中,临时表是建立在系统临时文件夹中的表,数据库一般不会将其序列化到磁盘上,而是存在于数据库服务器的内存中,并在使用完之后销毁。具体地,在操作的表数据量庞大而且又要关联其他表进行查询时,或者操作的数据是临时性数据且在短期内会有很多dml(数据操纵语言,data manipulation language)操作时,或者做查询时需要连接很多个表时,如果直接操作数据库的业务表可能效率很低,这时就可以借助临时表来提升效率。
39.具体地,本实施例中,待检测脚本可以是hive/spark sql中的脚本文件。
40.hive是一种底层封装了hadoop的数据仓库处理工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在hadoop中的大规模数据的机制。hadoop是一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。
41.spark sql是spark用来处理结构化数据的一个模块。spark是为大规模数据处理而设计的快速通用的计算引擎。
42.102、针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表。
43.可选地,本实施例中,步骤“针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果”,可以包括:
44.针对每个临时表,对所述临时表进行解析,得到所述临时表对应的初始解析结果,
所述初始解析结果包括所述临时表中的字段和依赖的初始来源表;
45.针对所述初始来源表中每个字段,对所述字段的依赖关系进行递归解析,得到所述字段依赖的来源表;
46.根据所述初始解析结果和所述初始来源表中每个字段依赖的来源表,获取所述临时表对应的解析结果。
47.其中,解析得到的临时表对应的初始解析结果可以包括临时表中的字段和依赖的初始来源表,初始来源表具体可以是临时表中目标类型语句的依赖表,如where条件依赖表、join条件依赖表、group by与order by依赖表等,本实施例对此不作限制。具体地,解析每一段临时表,得到的初始解析结果可以包括临时表名、字段名、字段加工逻辑、where条件、where条件依赖表与字段、join条件、join条件依赖表与字段,group by与order by逻辑与依赖表和字段等。
48.其中,可以将初始解析结果中临时表的字段和依赖的初始来源表、以及初始来源表中每个字段依赖的来源表,确定为临时表对应的解析结果。
49.其中,对初始来源表中字段的依赖关系进行递归解析,具体也即根据初始来源表每个字段对应的临时依赖,不断递归,获取初始来源表每个字段的最终加工逻辑,最终的逻辑依赖表与字段,最终的where条件、最终的where条件依赖表与字段,最终join条件、最终join条件依赖表与字段,最终group by与最终order by逻辑与依赖表和字段。
50.其中,where语句可以用于规定选择的标准。join语句用于根据两个或多个表中的列之间的关系,从这些表中查询数据。group by语句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,则它们将被合并为一条数据。order by语句用于根据指定的列对结果集进行排序。
51.103、获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则。
52.其中,脚本质量规则集合中的质量规则可以是由数据开发经验的工程师预先设置的,质量规则的类型有多种,具体可以根据实际情况进行设置,本实施例对此不作限制。
53.104、根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
54.可选地,本实施例中,步骤“根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果”,可以包括:
55.针对所述待检测脚本中每个临时表,根据所述质量规则,检测所述临时表中的字段是否包含目标字段;
56.当所述临时表中的字段包含所述目标字段时,判断所述目标字段依赖的来源表的类型是否为临时表类型;
57.当所述目标字段依赖的来源表的类型不为所述临时表类型时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
58.其中,目标字段具体可以是*字段。*字段具体为表示已建立索引的字段。目标字段依赖的来源表类型不为临时表类型,即目标字段依赖的来源表类型为非临时表。
59.其中,具体地,*字段且其依赖非临时表的写法会读取表全字段,增加读取消耗,影响时效与稳定性。本实施例可以通过上述检测目标字段和目标字段依赖的来源表类型的质量规则,检测出这种写法的质量问题;具体可以根据该质量规则判断每段解析的临时表对
应的字段中是否包含*字段;若包含*字段,再判断*字段的来源表是否是非临时表,若*字段的来源表是非临时表,则生成该临时表中*字段依赖非临时表的质量问题。
60.可选地,本实施例中,步骤“根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果”,可以包括:
61.针对所述待检测脚本中每个临时表,根据所述质量规则,从所述临时表依赖的来源表中确定不属于临时表类型的目标来源表;
62.判断依赖所述目标来源表的目标类型语句对应的字段是否包含所述目标来源表的分区字段;
63.基于判断结果,确定所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
64.其中,目标类型语句可以是where语句等,本实施例对此不作限制。目标来源表具体为非临时表。
65.其中,具体地,如果引用的非临时表没有使用分区字段,则会导致往后分区拉取的分区数据越来越多,从而导致数据越跑越慢,影响时效与稳定性。本实施例可以根据检测分区表不带分区字段过滤的质量规则,遍历每一段临时表解析结果,获取非临时表的来源表,针对非临时表的来源表,判断where条件的来源表与字段,是否包含来源表的分区字段。
66.其中,若该判断结果为依赖目标来源表的目标类型语句对应的字段不包含该目标来源表的分区字段,则生成该临时表中分区表不带分区字段过滤的质量问题。
67.可选地,本实施例中,步骤“基于判断结果,确定所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果”,可以包括:
68.当依赖所述目标来源表的目标类型语句对应的字段包含所述目标来源表的分区字段时,判断所述目标类型语句对应的语句逻辑是否包含第一逻辑符号;
69.当所述目标类型语句对应的语句逻辑包含第一逻辑符号时,判断所述目标类型语句对应的语句逻辑是否包含第二逻辑符号;
70.当所述目标类型语句对应的语句逻辑不包含第二逻辑符号时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
71.其中,第一逻辑符号可以是小于,第二逻辑符号可以是大于,本实施例对此不作限制。
72.其中,具体地,如果引用的非临时表使用了分区字段去过滤,但是过滤条件只有小于而没有写大于,则会导致往后分区拉取的分区数据越来越多,数据越跑越慢,影响时效与稳定性。本实施例可以根据用于检测分区表带了分区字段去过滤,但只有小于而没有写大于的质量规则,遍历每一段临时表解析结果,获取非临时表的来源表;针对非临时表的来源表,判断where条件的来源表与字段,是否包含来源表的分区字段,若其包含来源表的分区字段,再判断where条件的逻辑中是否包含分区字段小于;若where条件的逻辑中包含分区字段小于,再判断where条件的逻辑中是否包含分区字段大于;若where条件的逻辑不包含分区字段大于,则生成该段临时表的分区表带了分区字段去过滤,但是只有小于而没有写大于的质量问题。
73.可选地,本实施例中,步骤“根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果”,可以包括:
74.针对所述待检测脚本中每个临时表,根据所述质量规则,对所述临时表中的字段和依赖的来源表进行质量检测,得到所述临时表对应的质量问题;
75.根据所述质量规则,对所述待检测脚本中的字段进行合并,得到目标字符串;并将所述目标字符串与预设关键字进行匹配;
76.根据匹配结果和各个临时表对应的质量问题,生成所述待检测脚本的质量检测结果。
77.其中,对待检测脚本中的字段进行合并,具体可以是对待检测脚本中的字段进行拼接,从而得到目标字符串。预设关键字可以是union、select distinct、count(distinct、in(select、exists(select等,本实施例对此不作限制。
78.其中,具体地,本实施例还可以对全脚本的字段进行检测,检测全脚本中是否存在用union而不是用union all的写法,或者检测全脚本中是否存在select distinct、count(distinct、in(select、exists(select用法的用法等。具体地,用union而不是用union all的写法会因为union的自动排序导致脚本性能下降,进而影响数据时效与稳定性。而select distinct、count(distinct、in(select、exists(select用法会降低并行度,而且会导致数据倾斜,进而影响时效和稳定性。
79.其中,本技术可以根据用于检测用union而不是用union all的质量规则,检索全脚本,将脚本中的字段合并到一行字符串中,精准匹配union关键词;然后,去除左括号和空格,匹配unionselect关键词。若匹配结果为脚本中存在union的用法,则生成该待检测脚本中存在用union而不是用union all的质量问题。
80.具体地,union和union all关键字的作用都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。一方面,对重复结果的处理:union在进行表链接后会筛选掉重复的记录,union all则不会去除重复记录。另一方面,对排序的处理:union将会按照字段的顺序进行排序;union all只是简单的将两个结果合并后就返回。从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用union all。
81.其中,本技术可以根据检测select distinct、count(distinct、in(select、exists(select用法的质量规则,检索全脚本,合并到一行字符串中,删除空格;然后,删除join(select字符串;再匹配是否包含selectdistinct或count(distinct或in(select或exists(select关键字。若匹配结果为包含这些关键字,则生成该待检测脚本中存在select distinct、count(distinct、in(select、exists(select用法的质量问题。
82.如图1c所示,在软件产品的开发流程中,可以包括需求分析、数据探源、模型设计、代码开发、测试、投产运营等多个阶段,在代码开发完成后,一般需要检测脚本质量问题,再进行软件测试。本技术的脚本质量检测方法可以提供一种脚本质量问题自动检测工具,利用该工具可以自动解析脚本代码、检测脚本质量问题,指导开发提前解决,提高代码质量问题识别和处理效率、保证脚本质量、减少脚本测试阶段返工成本。
83.具体地,本技术提供的基于脚本解析的脚本质量问题自动检测工具主要有两大模块:脚本解析和脚本质量问题检测,参考图1d。
84.其中,脚本解析步骤如下:
85.1、读取数据仓库脚本:读取数据仓库系统中每个作业表对应的加工脚本;
86.2、解析脚本得到临时表:解析每一个脚本,得到每个脚本的所有临时表;
87.3、解析临时表:解析每一段临时表,得到临时表名、字段名、字段加工逻辑、where条件、where条件依赖表与字段、join条件、join条件依赖表与字段,group by与order by逻辑与依赖表和字段;
88.4、识别表所有字段:识别最终写入表以及写入表的所有字段,这里的写入表具体可以是上面实施例中的初始来源表;
89.5、获取表每个字段的加工逻辑:根据写入表每个字段对应的临时依赖,不断递归,获取写入表每个字段的最终加工逻辑,最终的逻辑依赖表与字段,最终的where条件、最终的where条件依赖表与字段,最终join条件、最终join条件依赖表与字段,最终group by与最终order by逻辑与依赖表和字段;
90.6、把解析结果写入数据库。
91.其中,脚本质量问题检测,主要有以下6大类问题的检测,具体如下:
92.1、检测select*的质量问题
93.该写法会读取表全字段,会加大读取消耗,影响时效与稳定性。该质量问题的检测步骤可以包括:先判断每段解析的临时表对应的字段中是否包含*字段;若是,再判断*字段的来源表是否是非临时表。
94.2、检测分区表不带分区字段过滤的质量问题
95.该写法会导致往后分区拉取的分区数据越来越多,越跑越慢,影响时效与稳定性。该质量问题的检测步骤可以包括:遍历每一段临时表解析结果,获取来源表为非临时表的,判断where条件的来源表与字段,是否包含来源表的分区字段。
96.3、检测分区表带了分区字段过滤条件但只有小于而没有写大于的质量问题
97.该写法会导致往后分区拉取的分区数据越来越多,越跑越慢,影响时效与稳定性。该质量问题的检测步骤可以如下:
98.step1:遍历每一段临时表解析结果,获取来源表为非临时表的
99.step2:判断where条件的来源表与字段,是否包含来源表的分区字段
100.step3:判断where条件的逻辑中是否包含分区字段小于
101.step4:判断where条件的逻辑中是否包含分区字段大于
102.4、检测用名字类字段去做表关联的质量问题
103.该写法大概率会因为名字数据的不一致导致数据关联不上,影响数据质量。该质量问题的检测步骤可以包括:
104.step1:遍历每一段临时表解析结果,获取关联键对应的字段
105.step2:递归获取关联键对应的字段的最终非临时表的字段
106.step3:在元数据给每个字段打上数据是否包含中文的标签
107.step4:判断最终非临时表的字段是否包含中文数据标签
108.5、检测用union而不是用union all的质量问题
109.该写法会因为union的自动排序导致脚本性能下降,进而影响数据时效与稳定性。该质量问题的检测步骤可以包括:检索全脚本,合并到一行字符串中,精准匹配union关键词;然后,去除左括号和空格,匹配unionselect关键词。
110.6、检测select distinct、count(distinct、in(select、exists(select用法的质
量问题
111.该写法并行度降低,而且会导致数据倾斜,进而影响时效和稳定性。该质量问题的检测步骤可以包括:检索全脚本,合并到一行字符串中,删除空格,再删除join(select字符串;然后,匹配是否包含selectdistinct或count(distinct或in(select或exists(select关键字。
112.在检测结束后,本实施例还可以生成问题清单报表,并支持查询和导出,如图1e所示。其中,问题清单报表可以包括:报表展示sql质量问题清单,支持按库名、表名等条件搜索问题清单、导出问题明细处理,问题清晰透明、处理进展可管控。
113.相比当前使用的人工代码评审识别脚本质量问题,本技术的基于脚本解析的自动识别脚本质量问题工具可以快速和比较全面的自动识别脚本中的质量问题,引导开发人员自主发现、解决问题,大大提升识别准确率和效率,问题清晰透明、处理进展可管控,节省了大量的人力和时间,同时提升数据系统的稳定性、时效和数据质量。
114.由上可知,本实施例可以获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。本技术可以通过对待检测脚本进行解析,并利用质量规则来对解析结果进行质量检测,这样可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
115.根据前面实施例所描述的方法,以下将以该脚本质量检测装置具体集成在服务器举例作进一步详细说明。
116.本技术实施例提供一种脚本质量检测方法,如图2所示,该脚本质量检测方法的具体流程可以如下:
117.201、服务器获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表。
118.具体地,本实施例中,待检测脚本可以是hive/spark sql中的脚本文件。
119.其中,临时表是建立在系统临时文件夹中的表,数据库一般不会将其序列化到磁盘上,而是存在于数据库服务器的内存中,并在使用完之后销毁。
120.202、服务器针对每个临时表,对所述临时表进行解析,得到所述临时表对应的初始解析结果,所述初始解析结果包括所述临时表中的字段和依赖的初始来源表。
121.其中,解析得到的临时表对应的初始解析结果可以包括临时表中的字段和依赖的初始来源表,初始来源表具体可以是临时表中目标类型语句的依赖表,如where条件依赖表、join条件依赖表、group by与order by依赖表等,本实施例对此不作限制。具体地,解析每一段临时表,得到的初始解析结果可以包括临时表名、字段名、字段加工逻辑、where条件、where条件依赖表与字段、join条件、join条件依赖表与字段,group by与order by逻辑与依赖表和字段等。
122.203、服务器针对所述初始来源表中每个字段,对所述字段的依赖关系进行递归解析,得到所述字段依赖的来源表。
123.其中,对初始来源表中字段的依赖关系进行递归解析,具体也即根据初始来源表每个字段对应的临时依赖,不断递归,获取初始来源表每个字段的最终加工逻辑,最终的逻辑依赖表与字段,最终的where条件、最终的where条件依赖表与字段,最终join条件、最终join条件依赖表与字段,最终group by与最终order by逻辑与依赖表和字段。
124.204、服务器根据所述初始解析结果和所述初始来源表中每个字段依赖的来源表,获取所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表。
125.205、服务器获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则。
126.206、服务器根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
127.可选地,本实施例中,步骤“根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果”,可以包括:
128.针对所述待检测脚本中每个临时表,根据所述质量规则,检测所述临时表中的字段是否包含目标字段;
129.当所述临时表中的字段包含所述目标字段时,判断所述目标字段依赖的来源表的类型是否为临时表类型;
130.当所述目标字段依赖的来源表的类型不为所述临时表类型时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
131.其中,目标字段具体可以是*字段。*字段具体为表示已建立索引的字段。目标字段依赖的来源表类型不为临时表类型,即目标字段依赖的来源表类型为非临时表。
132.其中,具体地,*字段且其依赖非临时表的写法会读取表全字段,增加读取消耗,影响时效与稳定性。本实施例可以通过上述检测目标字段和目标字段依赖的来源表类型的质量规则,检测出这种写法的质量问题;具体可以根据该质量规则判断每段解析的临时表对应的字段中是否包含*字段;若包含*字段,再判断*字段的来源表是否是非临时表,若*字段的来源表是非临时表,则生成该临时表中*字段依赖非临时表的质量问题。
133.可选地,本实施例中,步骤“根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果”,可以包括:
134.针对所述待检测脚本中每个临时表,根据所述质量规则,从所述临时表依赖的来源表中确定不属于临时表类型的目标来源表;
135.判断依赖所述目标来源表的目标类型语句对应的字段是否包含所述目标来源表的分区字段;
136.基于判断结果,确定所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
137.其中,目标类型语句可以是where语句等,本实施例对此不作限制。目标来源表具体为非临时表。
138.其中,具体地,如果引用的非临时表没有使用分区字段,则会导致往后分区拉取的分区数据越来越多,从而导致数据越跑越慢,影响时效与稳定性。本实施例可以根据检测分区表不带分区字段过滤的质量规则,遍历每一段临时表解析结果,获取非临时表的来源表,
针对非临时表的来源表,判断where条件的来源表与字段,是否包含来源表的分区字段。
139.其中,若该判断结果为依赖目标来源表的目标类型语句对应的字段不包含该目标来源表的分区字段,则生成该临时表中分区表不带分区字段过滤的质量问题。
140.可选地,本实施例中,步骤“基于判断结果,确定所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果”,可以包括:
141.当依赖所述目标来源表的目标类型语句对应的字段包含所述目标来源表的分区字段时,判断所述目标类型语句对应的语句逻辑是否包含第一逻辑符号;
142.当所述目标类型语句对应的语句逻辑包含第一逻辑符号时,判断所述目标类型语句对应的语句逻辑是否包含第二逻辑符号;
143.当所述目标类型语句对应的语句逻辑不包含第二逻辑符号时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
144.其中,第一逻辑符号可以是小于,第二逻辑符号可以是大于,本实施例对此不作限制。
145.其中,具体地,如果引用的非临时表使用了分区字段去过滤,但是过滤条件只有小于而没有写大于,则会导致往后分区拉取的分区数据越来越多,数据越跑越慢,影响时效与稳定性。本实施例可以根据用于检测分区表带了分区字段去过滤,但只有小于而没有写大于的质量规则,遍历每一段临时表解析结果,获取非临时表的来源表;针对非临时表的来源表,判断where条件的来源表与字段,是否包含来源表的分区字段,若其包含来源表的分区字段,再判断where条件的逻辑中是否包含分区字段小于;若where条件的逻辑中包含分区字段小于,再判断where条件的逻辑中是否包含分区字段大于;若where条件的逻辑不包含分区字段大于,则生成该段临时表的分区表带了分区字段去过滤,但是只有小于而没有写大于的质量问题。
146.由上可知,本实施例可以通过服务器获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的初始解析结果,所述初始解析结果包括所述临时表中的字段和依赖的初始来源表;针对所述初始来源表中每个字段,对所述字段的依赖关系进行递归解析,得到所述字段依赖的来源表;根据所述初始解析结果和所述初始来源表中每个字段依赖的来源表,获取所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。本技术可以通过对待检测脚本进行解析,并利用质量规则来对解析结果进行质量检测,这样可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
147.为了更好地实施以上方法,本技术实施例还提供一种脚本质量检测装置,如图3所示,该脚本质量检测装置可以包括脚本获取单元301、解析单元302、规则获取单元303以及检测单元304,如下:
148.(1)脚本获取单元301;
149.脚本获取单元,用于获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表。
150.(2)解析单元302;
151.解析单元,用于针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表。
152.可选的,在本技术的一些实施例中,所述解析单元可以包括解析子单元、递归解析子单元和获取子单元,如下:
153.所述解析子单元,用于针对每个临时表,对所述临时表进行解析,得到所述临时表对应的初始解析结果,所述初始解析结果包括所述临时表中的字段和依赖的初始来源表;
154.递归解析子单元,用于针对所述初始来源表中每个字段,对所述字段的依赖关系进行递归解析,得到所述字段依赖的来源表;
155.获取子单元,用于根据所述初始解析结果和所述初始来源表中每个字段依赖的来源表,获取所述临时表对应的解析结果。
156.(3)规则获取单元303;
157.规则获取单元,用于获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则。
158.(4)检测单元304;
159.检测单元,用于根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
160.可选的,在本技术的一些实施例中,所述检测单元可以包括第一检测子单元、第一判断子单元和第一生成子单元,如下:
161.所述第一检测子单元,用于针对所述待检测脚本中每个临时表,根据所述质量规则,检测所述临时表中的字段是否包含目标字段;
162.第一判断子单元,用于当所述临时表中的字段包含所述目标字段时,判断所述目标字段依赖的来源表的类型是否为临时表类型;
163.第一生成子单元,用于当所述目标字段依赖的来源表的类型不为所述临时表类型时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
164.可选的,在本技术的一些实施例中,所述检测单元可以包括第一确定子单元、第二判断子单元和第二确定子单元,如下:
165.所述第一确定子单元,用于针对所述待检测脚本中每个临时表,根据所述质量规则,从所述临时表依赖的来源表中确定不属于临时表类型的目标来源表;
166.第二判断子单元,用于判断依赖所述目标来源表的目标类型语句对应的字段是否包含所述目标来源表的分区字段;
167.第二确定子单元,用于基于判断结果,确定所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
168.可选的,在本技术的一些实施例中,所述第二确定子单元具体可以用于当依赖所述目标来源表的目标类型语句对应的字段包含所述目标来源表的分区字段时,判断所述目标类型语句对应的语句逻辑是否包含第一逻辑符号;当所述目标类型语句对应的语句逻辑包含第一逻辑符号时,判断所述目标类型语句对应的语句逻辑是否包含第二逻辑符号;当所述目标类型语句对应的语句逻辑不包含第二逻辑符号时,生成所述临时表对应的质量问题,得到所述待检测脚本的质量检测结果。
169.可选的,在本技术的一些实施例中,所述检测单元可以包括第二检测子单元、合并子单元和第二生成子单元,如下:
170.所述第二检测子单元,用于针对所述待检测脚本中每个临时表,根据所述质量规则,对所述临时表中的字段和依赖的来源表进行质量检测,得到所述临时表对应的质量问题;
171.合并子单元,用于根据所述质量规则,对所述待检测脚本中的字段进行合并,得到目标字符串;并将所述目标字符串与预设关键字进行匹配;
172.第二生成子单元,用于根据匹配结果和各个临时表对应的质量问题,生成所述待检测脚本的质量检测结果。
173.由上可知,本实施例可以由脚本获取单元301获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,通过解析单元302对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;由规则获取单元303获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;通过检测单元304根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。本技术可以通过对待检测脚本进行解析,并利用质量规则来对解析结果进行质量检测,这样可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
174.本技术实施例还提供一种电子设备,如图4所示,其示出了本技术实施例所涉及的电子设备的结构示意图,该电子设备可以是终端或者服务器等,具体来讲:
175.该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
176.处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
177.存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及脚本质量检测。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
178.电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等
功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
179.该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
180.尽管未示出,该电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
181.获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
182.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
183.由上可知,本实施例可以获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。本技术可以通过对待检测脚本进行解析,并利用质量规则来对解析结果进行质量检测,这样可以提高脚本的质量检测效率和准确性,降低人力物力成本,避免脚本质量问题流入生产环境中引起生产事故的情况。
184.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
185.为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本技术实施例所提供的任一种脚本质量检测方法中的步骤。例如,该指令可以执行如下步骤:
186.获取待检测脚本,并对所述待检测脚本进行解析,得到所述待检测脚本对应的至少一个临时表;针对每个临时表,对所述临时表进行解析,得到所述临时表对应的解析结果,所述解析结果包括所述临时表中的字段和依赖的来源表;获取脚本质量规则集合,所述脚本质量规则集合包括至少一个质量规则;根据所述质量规则,对所述待检测脚本中各临时表中的字段和依赖的来源表进行质量检测,生成所述待检测脚本的质量检测结果。
187.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
188.其中,该计算机可读存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
189.由于该计算机可读存储介质中所存储的指令,可以执行本技术实施例所提供的任一种脚本质量检测方法中的步骤,因此,可以实现本技术实施例所提供的任一种脚本质量
检测方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
190.根据本技术的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述脚本质量检测方面的各种可选实现方式中提供的方法。
191.以上对本技术实施例所提供的一种脚本质量检测方法以及相关设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献