HQL脚本校验方法及装置与流程

文档序号:26101477发布日期:2021-07-30 18:12阅读:234来源:国知局
HQL脚本校验方法及装置与流程

本申请涉及数据处理技术领域,特别涉及大数据技术领域,具体涉及hql脚本校验方法及装置。



背景技术:

企业的大数据服务云平台为各类专业大数据分析应用提供数据接入、存储、计算、安全管理、资源管理等服务,随着平台构建的不断完善,其技术体系日益庞大,承载的业务功能日益丰富,在平台运维体系不断扩大的同时,各大企业将大数据视作战略资源,hadoop生态系统的应用范围愈发广泛,越来越多的分析人员基于hive组件的hql语句进行相关专业领域的灵活查询、分析建模,不仅hql语句语法的正确性成为相关分析人员需要重点关注的技术问题,各个应用场景的具体模型和逻辑在新技术架构下的性能表现逐渐成为产品研发流程关注的焦点之一。

目前,对hql脚本进行校验的具体方式为:各开发人员需要通过hql脚本对数据湖或数据仓库中的基础数据或主题数据进行业务逻辑加工等关联操作,由于编写hql脚本的开发人员编码风格各异,同时对于hql语法的掌握水平参差不齐,在各项目开发过程中会掺杂各种低效写法导致作业运行效率缓慢,同时消耗大数据分布式集群资源巨大,且无法保证校验的准确性。



技术实现要素:

针对现有技术中的问题,本申请提供一种hql脚本校验方法及装置,能够有效提高hql脚本校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,进而能够提高hql脚本的应用可靠性并降低人力成本。

为解决上述技术问题,本申请提供以下技术方案:

第一方面,本申请提供一种hql脚本校验方法,包括:

拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验;

以及,基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

进一步地,所述对各个所述目标语句分别进行语法校验,包括:

基于预设的语句加工规则将各个所述目标语句分别转化为执行计划语句;

根据各个所述目标语句各自对应在分布式集群中的执行路径,在该分布式集群中对各个所述执行计划语句分别进行语法校验,以得到所述hql脚本对应的语法校验结果。

进一步地,所述在该分布式集群中对各个所述执行计划语句分别进行语法校验,以得到所述hql脚本对应的语法校验结果,包括:

基于各个所述目标语句各自对应的用户登陆信息登陆所述分布式集群;

将各个所述执行计划语句提交至所述分布式集群进行语法校验,以得到该分布式集群生成的所述hql脚本对应的语法校验结果。

进一步地,所述性能隐患语法规则包括:全表扫描和全表插入规则;

所述基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,包括:

基于所述全表扫描和全表插入规则对属于分区表且未做分区字段筛选的hql脚本进行全表扫描,以得到对应的全表扫描结果;

生成包含有所述全表扫描结果的性能隐患排查结果。

进一步地,所述性能隐患语法规则包括:笛卡尔积查询规则;

所述基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,包括:

基于所述笛卡尔积查询规则对所述hql脚本进行笛卡尔积查询,以得到对应的笛卡尔积查询结果;

生成包含有所述笛卡尔积查询结果的性能隐患排查结果。

进一步地,所述性能隐患语法规则包括:关键字检索规则;

所述基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,包括:

基于所述关键字检索规则对所述hql脚本进行性能隐患关键字检索,以得到对应的性能隐患关键字检索结果;

生成包含有所述性能隐患关键字检索结果的性能隐患排查结果。

进一步地,还包括:

输出经所述语法校验得到的所述hql脚本的语法校验结果和经所述性能隐患排查处理得到的所述hql脚本的性能隐患排查结果。

第二方面,本申请提供一种hql脚本校验装置,包括:

语法校验模块,用于拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验;

性能校验模块,用于基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的hql脚本校验方法。

第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的hql脚本校验方法。

由上述技术方案可知,本申请提供的一种hql脚本校验方法及装置,方法包括:拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验;以及,基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理;通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例中的hql脚本校验装置分别与客户端设备及大数据服务云等之间的交互示意图。

图2是本申请实施例中的hql脚本校验方法的第一种流程示意图。

图3是本申请实施例中的hql脚本校验方法的第二种流程示意图。

图4是本申请实施例中的hql脚本校验方法的第三种流程示意图。

图5是本申请实施例中的hql脚本校验方法的第四种流程示意图。

图6是本申请实施例中的hql脚本校验方法的第五种流程示意图。

图7是本申请实施例中的hql脚本校验方法的第六种流程示意图。

图8是本申请实施例中的hql脚本校验方法的第七种流程示意图。

图9是本申请实施例中的hql脚本校验装置的结构示意图。

图10是本申请应用实例提供的大数据性能容量扫描装置的功能示意图。

图11是本申请应用实例提供的hql语法校验装置的校验接口校验流程示意图。

图12是本申请应用实例提供的全表扫描和全表插入规则的应用流程示意图。

图13是本申请应用实例提供的笛卡尔积查询规则的应用流程示意图。

图14是本申请应用实例提供的关键字检索规则的应用流程示意图。

图15是本申请实施例中的电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明的是,本申请公开的hql脚本校验方法及装置可用于大数据技术领域,也可用于除大数据技术领域之外的任意领域,本申请公开的hql脚本校验方法及装置的应用领域不做限定。

以某商业银行为例,接入大数据服务云的离线批处理业务系统已达数百个。在每期基于大数据服务云的项目研发上线、迭代优化过程中,各开发人员需要通过hivesql(以下简称hql)脚本对数据湖或数据仓库中的基础数据或主题数据进行业务逻辑加工等关联操作。由于编写hql脚本的开发人员编码风格各异,同时对于hql语法的掌握水平参差不齐,在各项目开发过程中会掺杂各种低效写法导致作业运行效率缓慢,同时消耗大数据分布式集群资源巨大,该类离线批处理脚本存在着较大优化空间。而对于复杂逻辑的hql脚本实现或基于大表(tb级别)的基础数据关联hql脚本实现则更需要注重性能隐患,因此,对hql脚本中存在的技术问题进行校验排查并反馈整改的重要性不言而喻。

基于上述内容,本申请提供了语法校验和性能容量静态扫描方式。一是通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。二是制定hql常见性能隐患语法规则,同时对各接入大数据服务服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本发明对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

针对现有的hql脚本校验方式存在效率低、准确性差且人工成本高等问题,本申请实施例分别提供一种hql脚本校验方法、hql脚本校验装置、电子设备计算机可读存储介质,通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

在本申请的一个或多个实施例中,分布式集群可以指大数据服务云或hbase集群等,其中,hbase集群(hadoopdatabase)是指高可靠性、高性能、面向列、可伸缩的分布式存储系统,由主节点master和从节点regionserver组成,其中,master也可以专门写作hmaster,regionserver也可以写作hregionserver或者regionserver等。

基于上述内容,本申请还提供一种用于实现本申请一个或多个实施例中提供的hql脚本校验方法的hql脚本校验装置,参见图1,该hql脚本校验装置可以自行或通过第三方服务器等与各个用户持有的客户端设备、大数据服务云以及接入大数据服务云的各个离线批处理业务系统之间通信连接,hql脚本校验装置可以为一种服务器,自客户端设备或者各个离线批处理业务系统接收针对大数据服务云的hql脚本校验请求或者待校验的各个hql脚本,也可以自客户端设备、第三方数据库或本地获取相关的由用户预先设置的各类规则配置文件,例如本申请的一个或多个实施例中提及的语句加工规则、全表扫描和全表插入规则、笛卡尔积查询规则及关键字检索规则等中的至少一个。所述hql脚本校验装置在得到经所述语法校验得到的所述hql脚本的语法校验结果和经所述性能隐患排查处理得到的所述hql脚本的性能隐患排查结果之后,还可以将所述语法校验结果和性能隐患排查结果发送至所述客户端设备进行显示或发送至离线批处理业务系统等,以使用户及时获知所述hql脚本在大数据服务云的校验结果等。

可以理解的是,所述客户端设备可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、台式电脑、个人数字助理(pda)、车载设备、智能穿戴设备等。其中,所述智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。

上述的客户端设备可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通信链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。

上述服务器与所述客户端设备之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。所述网络协议例如可以包括tcp/ip协议、udp/ip协议、http协议、https协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的rpc协议(remoteprocedurecallprotocol,远程过程调用协议)、rest协议(representationalstatetransfer,表述性状态转移协议)等。

具体通过下述各个实施例及应用实例分别进行详细说明。

为了解决现有的hql脚本校验方式存在效率低、准确性差且人工成本高等问题,本申请提供一种hql脚本校验方法的实施例,参见图2,由hql脚本校验装置执行的所述hql脚本校验方法具体包含有如下内容:

步骤100:拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验。

在步骤100中,hql脚本校验装置可以通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。

步骤200:基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

在步骤200中,hql脚本校验装置可以根据用户预先制定并存储的hql常见的性能隐患语法规则,同时对各接入大数据服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本发明对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

为了有效节约分布式集群资源来进行校验,在本申请提供的hql脚本校验方法的一个实施例,参见图3,所述hql脚本校验方法中的步骤100具体包含有如下内容:

步骤110:拆分hql脚本以得到所述hql脚本对应的各个目标语句。

步骤120:基于预设的语句加工规则将各个所述目标语句分别转化为执行计划语句。

可以理解的是,所述语句加工规则是指在各个所述目标预计之前加入如explain等字样,当分布式集群到explain字样后,执行该语句时只执行、不下推,可以有效节约集群资源来进行校验。

步骤130:根据各个所述目标语句各自对应在分布式集群中的执行路径,在该分布式集群中对各个所述执行计划语句分别进行语法校验,以得到所述hql脚本对应的语法校验结果。

具体来说,可以预先采用python语言开发,通过输入各待检验hql脚本的路径对相应路径下的hql脚本先进行语法校验,查看是否有语法错误,否则返回给开发错误信息。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过基于预设的语句加工规则将各个所述目标语句分别转化为执行计划语句,能够实现各个目标语句在分布式集群中只执行、不下推,可以有效节约分布式集群资源来进行校验,并能够有效提高应用分布式集群进行语法校验的可靠性及稳定性。

为了提高应用分布式集群进行语法校验的安全性,在本申请提供的hql脚本校验方法的一个实施例,参见图4,所述hql脚本校验方法中的步骤130具体包含有如下内容:

步骤131:根据各个所述目标语句各自对应在分布式集群中的执行路径,基于各个所述目标语句各自对应的用户登陆信息登陆所述分布式集群。

步骤132:将各个所述执行计划语句提交至所述分布式集群进行语法校验,以得到该分布式集群生成的所述hql脚本对应的语法校验结果。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过基于各个所述目标语句各自对应的用户登陆信息登陆所述分布式集群并提交执行计划语句进行语法校验,能够有效提高应用分布式集群进行语法校验的安全性及可靠性。

为了进一步提高对所述hql脚本进行性能隐患排查处理的准确性,在本申请提供的hql脚本校验方法的一个实施例,所述性能隐患语法规则包括:全表扫描和全表插入规则;参见图5,所述hql脚本校验方法中的步骤200具体包含有如下内容:

步骤211:基于所述全表扫描和全表插入规则对属于分区表且未做分区字段筛选的hql脚本进行全表扫描,以得到对应的全表扫描结果。

步骤212:生成包含有所述全表扫描结果的性能隐患排查结果。

具体来说,hql脚本校验装置可以首先添加规则配置,提供配置分区表查询服务信息,供检查规则使用服务信息查询分区表信息,其中的分区表信息包括分区表名称、分区字段名称;然后使用sql检查服务框架,解析出sql语法树,遍历该语法树查找数据表(sqlidentifier)。由于是静态检查规则,无法判断标识符是否为表或视图,因此对此不作检查全部作为表处理。通过分区表查询服务查询表是否为分区表及分区字段,若非分区表则对当前表不做全表扫描检查,继续处理下一个表。对于sql查询目标为分区表,若对该表未做分区字段筛选(on条件及where条件中),则判定语句全表扫描,返回检查结果命中。对于子查询嵌套的sql,数据库在执行时会做执行计划优化,如果外层查询存在对分区字段的查询,判定无全表扫描,返回未命中。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过基于所述全表扫描和全表插入规则对属于分区表且未做分区字段筛选的hql脚本进行全表扫描,能够有效提高对所述hql脚本进行性能隐患排查处理的准确性、全面性及可靠性。

为了进一步提高对所述hql脚本进行性能隐患排查处理的准确性,在本申请提供的hql脚本校验方法的一个实施例,所述性能隐患语法规则包括:笛卡尔积查询规则;参见图6,所述hql脚本校验方法中的步骤200还具体包含有如下内容:

步骤221:基于所述笛卡尔积查询规则对所述hql脚本进行笛卡尔积查询,以得到对应的笛卡尔积查询结果。

步骤222:生成包含有所述笛卡尔积查询结果的性能隐患排查结果。

具体来说,hql脚本校验装置可以添加规则配置,提供配置小数据量列表(简称小表),供检查规则读取(白名单功能);然后使用sql检查服务框架,解析出sql语法树,由根节点向叶子节点遍历语法树中sqljoin节点。对于join运算两侧操作子均为标识符sqlidentifier的情况,检查两个表(标识符)是否为参数表中配置的小表。对于join运算两侧操作子存在非标识符的情况,分别检查左右两个操作子,判断其查询结果大小情况。对于union操作,基于预设的运算规则划分大结果集或小结果集;针对其他intersect等非扩大运算,其结果均认为是小结果集,另外,大表笛卡尔积判断还需要预设的特殊情形。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过基于所述笛卡尔积查询对所述hql脚本进行笛卡尔积查询,以得到对应的笛卡尔积查询结果,能够有效提高对所述hql脚本进行性能隐患排查处理的准确性、有效性及可靠性。

为了进一步提高对所述hql脚本进行性能隐患排查处理的准确性,在本申请提供的hql脚本校验方法的一个实施例,所述性能隐患语法规则包括:关键字检索规则;参见图7,所述hql脚本校验方法中的步骤200还具体包含有如下内容:

步骤231:基于所述关键字检索规则对所述hql脚本进行性能隐患关键字检索,以得到对应的性能隐患关键字检索结果。

步骤232:生成包含有所述性能隐患关键字检索结果的性能隐患排查结果。

具体来说,hql脚本校验装置可以在数据库中添加关键字规则配置,供检查规则读取,然后使用sql检查服务框架,解析出sql语法树,由根节点向叶子节点遍历语法树中sqljoin节点;如果出现select*、regexp、regexp_extract、regexp_replace、rlike、orde及count(distinct)by等,均可以判断成有性能隐患。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过基于所述关键字检索规则对所述hql脚本进行性能隐患关键字检索,以得到对应的性能隐患关键字检索结果,能够有效提高对所述hql脚本进行性能隐患排查处理的准确性、有效性及可靠性。

为了提高用户获知hql脚本校验结果的效率及便捷性,在本申请提供的hql脚本校验方法的一个实施例,参见图8,所述hql脚本校验方法中还具体包含有如下内容:

步骤300:输出经所述语法校验得到的所述hql脚本的语法校验结果和经所述性能隐患排查处理得到的所述hql脚本的性能隐患排查结果。

具体来说,hql脚本校验装置可以由python语言开发,通过输入各待检验hql脚本的路径对相应路径下的hql脚本先进行语法校验,查看是否有语法错误,否则则返回给开发错误信息,然后进行自动化静态扫描,结合既定规则的对比判断出脚本是否存在性能隐患语法。若存在相应的写法,则将脚本名称、语法校验结果、hql语句段落、性能隐患语法三部分内容输出至最终的汇总文件中。

从上述描述可知,本申请实施例提供的hql脚本校验方法,通过输出经所述语法校验得到的所述hql脚本的语法校验结果和经所述性能隐患排查处理得到的所述hql脚本的性能隐患排查结果,能够有效提高用户获知hql脚本校验结果的效率及便捷性,以有效提高用户体验。

从软件层面来说,为了解决现有的hql脚本校验方式存在效率低、准确性差且人工成本高等问题,本申请提供一种用于执行所述hql脚本校验方法中全部或部分内容的hql脚本校验装置的实施例,参见图9,所述hql脚本校验装置具体包含有如下内容:

语法校验模块10,用于拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验。

在语法校验模块10中,hql脚本校验装置可以通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。

性能校验模块20,用于基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

在性能校验模块20中,hql脚本校验装置可以根据用户预先制定并存储的hql常见的性能隐患语法规则,同时对各接入大数据服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本发明对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

本申请提供的hql脚本校验装置的实施例具体可以用于执行上述实施例中的hql脚本校验方法的实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。

从上述描述可知,本申请实施例提供的hql脚本校验装置,通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

为了进一步说明书本方案,本申请还提供一种应用大数据性能容量扫描装置实现的具有语法校验和性能容量静态扫描功能的hql脚本校验方法的具体应用实例,涉及大数据平台离线批处理技术领域,本申请应用实例通过两个技术方案实现了语法校验和性能容量静态扫描方法。一是通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。二是制定hql常见性能隐患语法规则,同时对各接入大数据服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本申请应用实例对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

1.整体流程:

大数据性能容量扫描装置由python语言开发,通过输入各待检验hql脚本的路径对相应路径下的hql脚本先进行语法校验,查看是否有语法错误,否则则返回给开发错误信息,然后进行自动化静态扫描,结合既定规则的对比判断出脚本是否存在性能隐患语法。若存在相应的写法,则将脚本名称、语法校验结果、hql语句段落、性能隐患语法三部分内容输出至最终的汇总文件中。参见图10,大数据性能容量扫描装置的功能包含有:接入大数据服务云的业务逻辑加工hql脚本、规则制定、脚本拆分、脚本解析、规则判定及输出脚本扫描结果。

2.规则简述:

在大数据性能容量扫描装置中,最重要的一部分为高危性能容量语法判定规则的设定,在综合考虑实际脚本内容和性能提升之后,该装置制定了以下3大类规则:

(1)全表扫描和全表插入规则;

(2)笛卡尔积查询;

(3)关键字检索(使用了低效的关键语句);

1)select*或selectt.*;

2)使用orderby进行排序;

3)使用count(distinct)操作;

4)unionall部分个数大于2;

5)使用collect_list,collect_set函数。

3.技术实现:

(1)将基于执行计划的hql语法校验装置

参见图11,hql语法校验装置的校验接口校验流程主要通过如下四个步骤实现:

1)应用侧发送待校验的语句至url;

2)将url获取到的语句进行加工成执行计划语句;

3)根据语句的标识去数据库获取用户登陆信息;

4)使用该用户信息登陆集群提交语句;

5)获取到集群返回的语句校验信息;

其中执行计划语句相对于普通sql语句前有explain字样,集群读到explain字样后,执行该语句时只执行不下推,可以有效节约集群资源来进行校验。

装置的url为所在服务器的ip,用户连接url提交语句后,装置的tomcat组件会捕捉语句,并将其记录在数据库中,待后续校验的进行。

(2)性能静态校验

利用python代码将hql脚本以分号为间隔拆分为多个hql语句,依次检查每一句hql语句是否存在性能问题:通过调用python中sqlparse等库对hql脚本进行拆分,根据数据类型提取出相关信息(sqlparse会将hql语句拆分为token,每一个token都对应一个数据类型);对于脚本中是否含有规则中关键词的判断,采用逐行扫描脚本中的每一行语句,判断这行语句中是否存在规则中涉及到的关键词,并将这个判断功能封装为一个接口,后续通过调用接口的方式来实现对所有hql脚本的分析。

2-1)参见图12,全表扫描和全表插入规则:

①添加规则配置,提供配置分区表查询服务信息,供检查规则使用服务信息查询分区表信息。

分区表信息包括分区表名称、分区字段名称。

②使用sql检查服务框架,解析出sql语法树,遍历该语法树查找数据表(sqlidentifier)。

由于是静态检查规则,无法判断标识符是否为表或视图,因此对此不作检查全部作为表处理。

③通过分区表查询服务查询表是否为分区表及分区字段,若非分区表则对当前表不做全表扫描检查,继续处理下一个表。

④对于sql查询目标为分区表,若对该表未做分区字段筛选(on条件及where条件中),则判定语句全表扫描,返回检查结果命中。

⑤对于子查询嵌套的sql,数据库在执行时会做执行计划优化,如果外层查询存在对分区字段的查询,判定无全表扫描,返回未命中。

2-2)参见图13,笛卡尔积查询:

①添加规则配置,提供配置小数据量列表(简称小表),供检查规则读取(白名单功能)。

②使用sql检查服务框架,解析出sql语法树,由根节点向叶子节点遍历语法树中sqljoin节点。

③对于join运算两侧操作子均为标识符sqlidentifier的情况,检查两个表(标识符)是否为参数表中配置的小表。

若两个表均不是小表,则认为可能是两个大表做笛卡尔积运算,继续判断两个表是否各自都有on条件做筛选。

若上述两表各自都没有on条件做筛选,则判定语句中存在两个大表做笛卡尔积运算,直接抛出规则命中异常,返回检查结果为命中。

其余情况认为无规则命中。

由于是静态检查规则,无法判断标识符是否为表或视图,因此对此不作检查全部作为表处理。

④对于join运算两侧操作子存在非标识符的情况,分别检查左右两个操作子,判断其查询结果大小情况。

判断逻辑使用步骤②开始的逻辑进行递归判断,操作子中存在大表笛卡尔积运算则抛出命中异常。

左右操作子中不存在join运算时,如果是小表查询,则判断为小数据集,如果是大表查询且无条件筛选,则判断为大数据集。

左右操作子为以下三种情况时,判定语句中存在大表笛卡尔积运算,抛出规则命中异常,返回检查结果为命中。

大表join大结果集=命中;

大表join大表=命中;

大结果集join大结果集=命中。

⑤对于union操作,运算规则如下:

(大结果集/大表)union(大结果集/大表/小结果集/小表)=大结果集。

(小结果集/小表)union(小结果集/小表)=小结果集。

⑥其他intersect等非扩大运算,其结果均认为是小结果集。

⑦大表笛卡尔积判断需要考虑但不限于以下情况:

join的on条件中出现1=1,t1.a=t1.a,作为笛卡尔积处理。

selectt1.*,t2.*fromt1joint2ont1.date>='2010/01/01'andt2.date>='2010/01/01',两表均有筛选,不作为笛卡尔积处理。

2-3)参见图14,关键字查询:

①在数据库中添加关键字规则配置,供检查规则读取。

②使用sql检查服务框架,解析出sql语法树,由根节点向叶子节点遍历语法树中sqljoin节点。

③如果出现select*,regexp、regexp_extract、regexp_replace、rlike,order,count(distinct)by等,均可以判断成有性能隐患。

基于上述技术方案,本申请应用实例提供的基于大数据性能容量扫描装置实现hql脚本校验方法,具备如下有益效果:

(1)基于大数据服务云平台的离线批处理作业运行效能提升

该装置通过对hql脚本中的低效、高风险、错误语法进行扫描遍历,针对符合既定规则的语法做出提醒并反馈开发人员整改,整改后的批量作业性能得以调优,相关基于大数据平台的离线分析挖掘场景的应用作业运行时效得到大幅提升。

(2)大数据分布式集群计算资源集约

该装置通过对hql语句中低效语法的优化规避可以极大地减少单位时间内作业对大数据分布式集群的计算资源消耗,节省无需占用的资源,使整个系统有条不紊地进行运转,提高大数据平台的整体工作效率。

(3)脚本性能分析自动化

通过大数据性能容量扫描装置可以根据规则筛选出不符合性能要求的脚本,并标注出不符合的具体规则种类,实现了快速精准定位问题,在后续进行脚本性能优化的时候确定优化方向。这一过程完全由程序进行自动化操作,无需人为干预,从而使脚本校验的规则和流程更加规范化,不会出现因人为主观因素导致的对脚本的判断失误,同时大大减少了人力分析脚本所需时间,提升了分析脚本的效率。

(4)灵活性高,支持单个、批量分析,规则库可不断丰富完善

大数据性能容量扫描装置支持大批量脚本分析,也支持单个脚本检验,因此它不仅可以用来发现脚本中存在的性能问题,也可用于后续判断修改后脚本的性能问题是否得到解决:用大数据性能容量扫描装置分析修改后的脚本,判断之前的性能问题是否的到改善并检验是否存在新出现的性能问题,可以根据需求灵活调整输入脚本的数量,在操作上具有很强的灵活性。同时它适用于所有hql脚本的分析,且装置中的规则可以不断进行修改、完善和添加,对后续整个装置的更新迭代设置了十分灵活的机制,能够通过对代码的微小调整实现功能的更新,是一个十分友好的可持续调整优化的装置。也可通过修改内部规则实现其他的功能,例如对其他类型语法脚本的分析,适用性较强。

从硬件层面来说,为了解决现有的hql脚本校验方式存在效率低、准确性差且人工成本高等问题,本申请提供一种用于实现所述hql脚本校验方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:

图15为本申请实施例的电子设备9600的系统构成的示意框图。如图15所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图15是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。

在一实施例中,hql脚本校验功能可以被集成到中央处理器中。其中,中央处理器可以被配置为进行如下控制:

步骤100:拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验。

在步骤100中,hql脚本校验装置可以通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。

步骤200:基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

在步骤200中,hql脚本校验装置可以根据用户预先制定并存储的hql常见的性能隐患语法规则,同时对各接入大数据服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本发明对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

从上述描述可知,本申请实施例提供的电子设备,通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

在另一个实施方式中,hql脚本校验装置可以与中央处理器9100分开配置,例如可以将hql脚本校验装置配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现hql脚本校验功能。

如图15所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图15中所示的所有部件;此外,电子设备9600还可以包括图15中没有示出的部件,可以参考现有技术。

如图15所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。

其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。

输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为lcd显示器,但并不限于此。

该存储器9140可以是固态存储器,例如,只读存储器(rom)、随机存取存储器(ram)、sim卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为eprom等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。

存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。

通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。

基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。

本申请的实施例还提供能够实现上述实施例中的hql脚本校验方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为服务器或客户端的hql脚本校验方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:

步骤100:拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验。

在步骤100中,hql脚本校验装置可以通过利用分布式技术的执行计划特性,对普通的查询语句进行再编写成执行计划语句(语句前加explain),集群识别执行后可以详细的返回出执行语句对应的mr代码(mr过程为hql语句在集群侧分解任务的过程),装置通过遍历输出内容中的error、failed、关键字找出所校验语句是否存在语法问题以及所存在的具体问题。相关数据分析人员能够在第一时间对自己的hql语句进行语法校验而无需在将语句提交到yarn上才能发现语法问题,为hql语句的编写、提交集群执行动作增加了一种事前校验机制,使用hql语句进行的相关灵活查询、分析建模工作效能得以提升。

步骤200:基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理。

在步骤200中,hql脚本校验装置可以根据用户预先制定并存储的hql常见的性能隐患语法规则,同时对各接入大数据服务云平台的业务逻辑加工hql脚本进行拆分,而后基于既定的规则对hql脚本进行高危语法提取,最终实现了对hql脚本的性能容量隐患排查。同时本发明对上述方法进行自动化的技术实现,通过该自动化hql脚本静态扫描装置克服了人工排查性能隐患的人力成本,实现了在短时间内即可全量解析hql脚本性能隐患问题的功能。

从上述描述可知,本申请实施例提供的计算机可读存储介质,通过拆分hql脚本以得到所述hql脚本对应的各个目标语句,并对各个所述目标语句分别进行语法校验,能够实现对hql脚本的自动语法校验,且能够有效提高对hql脚本进行语法校验的准确性及有效性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度;通过基于预设的性能隐患语法规则对所述hql脚本进行性能隐患排查处理,能够实现对hql脚本的自动性能隐患排查,进而能够有效提高hql脚本的应用可靠性,并能够有效提高hql脚本校验的效率、自动化程度及智能化程度,并有效降低人工排查hql脚本性能隐患的人力成本,提高用户体验。

本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1