检测SQL语句中字段的方法、装置、存储介质和设备制造方法及图纸

技术编号:35336851 阅读:24 留言:0更新日期:2022-10-26 11:58
本发明专利技术实施例提供一种检测SQL语句中字段的方法,所述方法包括:通过SQL解析引擎对多个SQL字段进行解析,判断每个SQL字段是否为标准字段,当为标准字段时进行收集,当某个SQL字段为非标准字段时,将其与下一字段进行拼接,获得拼接字段,收集标准字段和拼接字段作为被创建表的字段信息,之后按照语法规则逐层查找select语句,收集每层select语句中正确的字段或者别名信息,记录每层select语句中存在错误的字段信息,最后将被创建表的字段信息与最外层select语句中的字段信息进行匹配,记录不匹配的字段信息,最后输出所有错误信息。本发明专利技术能准确判断SQL语句中字段的错误信息,提高了SQL语句中字段判断的准确性,加快了数据开发的速度,节省了人力成本和时间成本。节省了人力成本和时间成本。节省了人力成本和时间成本。

【技术实现步骤摘要】
检测SQL语句中字段的方法、装置、存储介质和设备


[0001]本专利技术涉及数据处理
,尤其涉及一种检测SQL语句中字段的方法、装置、存储介质和设备。

技术介绍

[0002]随着大数据技术的不断SQL化,易于使用化,数据开发不再局限于标准的Hive

Sql开发,也在不断的使用Spark

Sql,更是接触了Flink

Sql开发,但是Flink

Sql比较新兴,并且有许多自己特殊语法的Sql,对初学者来说很不友好。一个经验丰富的数据开发,参考标准Hive

Sql写Flink

Sql,往往要提交集群,错误失败很多次,才能跑通,极大的浪费不必要的工作时间。
[0003]现有技术中,Spark、Flink等计算框架的SQL,提交到大数据集群上运行,都必须先启动作业、分配到资源后,才能检查SQL里的字段或字段别名,是否真的存在,是否写错了。比如写入一张表时,写入的字段数量,要和写入表的数量一致;比如嵌套、union子查询,里面会用到很多不同的表的字段,如果无法准确的判断出,哪一层哪个字段不存在,就会增加SQL开发的复杂性,需要耗费大量时间去调试。

技术实现思路

[0004]有鉴于此,本专利技术实施例提供一种检测SQL语句中字段的方法、装置、存储介质和设备,能够实时校验SQL中的语法和字段使用上逻辑
[0005]第一方面,本专利技术实施例提供一种检测SQL语句中字段的方法,所述方法包括:
[0006]利用分隔符对SQL语句进行分割,得到多个SQL字段;
[0007]获取SQL语法文件,并在所述SQL语法文件中添加非标准SQL语法规则,根据所述语法规则生成SQL解析引擎;
[0008]利用所述SQL解析引擎依次对每个SQL字段进行解析,根据解析结果判断每个SQL字段是否为标准字段;
[0009]当某个SQL字段为非标准字段时,将该非标准字段与下一字段进行拼接,获得拼接字段,收集所述标准字段和拼接字段作为被创建表的字段信息;
[0010]根据所述语法规则逐层查找select语句,并判断每层select语句中的字段是否为正确字段,收集每层select语句中正确的字段信息或者别名信息,记录每层select语句中存在错误的字段信息;
[0011]将所述被创建表的字段信息与最外层select语句中的字段信息进行匹配,并记录不匹配的字段信息;
[0012]输出每层select语句中存在错误的字段信息及不匹配的字段信息。
[0013]进一步的,所述非标准SQL语法规则包括:多层嵌套、递归、Spark、Flink的语法规则。
[0014]进一步的,根据解析结果判断每个SQL字段是否为标准字段包括:
[0015]若解析结果中某个SQL字段中不包含常量字符串,则判断该SQL字段为标准字段;
[0016]若解析结果中某个SQL字段中包含常量字符串,则判断该SQL字段为非标准字段。
[0017]进一步的,根据所述语法规则从最外层开始逐层查找select语句,当最外层是多selectunion的格式时,先查找最上一层的select语句。
[0018]进一步的,判断每层select语句中的字段是否为正确字段包括:
[0019]当某层select语句中的字段能够由from、join涉及的表提供时,判断该层select语句中的字段为正确的字段信息;
[0020]当某层select语句中的字段不能够由from、join涉及的表提供时,判断该层select语句中的字段为存在错误的字段信息。
[0021]进一步的,收集每层select语句中正确的字段信息或者别名信息,记录每层select语句中存在错误的字段信息之后,将所述被创建表的字段信息与最外层select语句中的字段信息进行匹配,并记录不匹配的字段信息之前,所述方法还包括:
[0022]判断是否存在嵌套子查询、union语句;
[0023]若存在嵌套子查询、union语句,则执行根据所述语法规则逐层查找select语句,并判断每层select语句中的字段是否为正确字段的步骤。
[0024]第二方面,本专利技术实施例提供一种检测SQL语句中字段的装置,所述装置包括:
[0025]分割模块,用于利用分隔符对SQL语句进行分割,得到多个SQL字段;
[0026]解析引擎生成模块,用于获取SQL语法文件,并在所述SQL语法文件中添加非标准SQL语法规则,根据所述语法规则生成SQL解析引擎;
[0027]第一判断模块,用于利用所述SQL解析引擎依次对每个SQL字段进行解析,根据解析结果判断每个SQL字段是否为标准字段;
[0028]第一收集模块,用于当某个SQL字段为非标准字段时,将该非标准字段与下一字段进行拼接,获得拼接字段,收集所述标准字段和拼接字段作为被创建表的字段信息;
[0029]第二判断模块,用于根据所述语法规则逐层查找select语句,并判断每层select语句中的字段是否为正确字段;
[0030]第二收集模块,用于收集每层select语句中正确的字段信息或者别名信息,记录每层select语句中存在错误的字段信息;
[0031]匹配模块,用于将所述被创建表的字段信息与最外层select语句中的字段信息进行匹配,并记录不匹配的字段信息;
[0032]输出模块,用于输出每层select语句中存在错误的字段信息及不匹配的字段信息。
[0033]第三方面,本专利技术实施例提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述第一方面任意一项所述的方法。
[0034]第四方面,本专利技术实施例提供一种设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述第一方面任一项所述的方法。
[0035]本专利技术提供的技术方案,通过SQL解析引擎对多个SQL字段进行解析,判断每个SQL字段是否为标准字段,当为标准字段时进行收集,当某个SQL字段为非标准字段时,将该非标准SQL字段与下一字段进行拼接,获得拼接字段,收集标准字段和拼接字段作为被创建表
的字段信息,之后按照语法规则逐层查找select语句,收集每层select语句中正确的字段或者别名信息,记录每层select语句中存在错误的字段信息,最后将被创建表的字段信息与最外层select语句中的字段信息进行匹配,记录不匹配的字段信息,最后输出所有错误信息。由此,能够准确的判断SQL语句中任何位置出现的字段是否存在于涉及的表、子查询中,能够实时校验SQL语句中的语法和字段使用上逻辑的痛点,能够适用于对多层嵌套、递归、覆盖Spark、Flnk所有语法的SQL逻辑校验,提高了SQL语句中字段判断的准确性,加快了数据开发的速度,节省了人力成本和时间成本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种检测SQL语句中字段的方法,其特征在于,所述方法包括:利用分隔符对SQL语句进行分割,得到多个SQL字段;获取SQL语法文件,并在所述SQL语法文件中添加非标准SQL语法规则,根据所述语法规则生成SQL解析引擎;利用所述SQL解析引擎依次对每个SQL字段进行解析,根据解析结果判断每个SQL字段是否为标准字段;当某个SQL字段为非标准字段时,将该非标准字段与下一字段进行拼接,获得拼接字段,收集所述标准字段和拼接字段作为被创建表的字段信息;根据所述语法规则逐层查找select语句,并判断每层select语句中的字段是否为正确字段,收集每层select语句中正确的字段信息或者别名信息,记录每层select语句中存在错误的字段信息;将所述被创建表的字段信息与最外层select语句中的字段信息进行匹配,并记录不匹配的字段信息;输出每层select语句中存在错误的字段信息及不匹配的字段信息。2.根据权利要求1所述的检测SQL语句中字段的方法,其特征在于,所述非标准SQL语法规则包括:多层嵌套、递归、Spark、Flink的语法规则。3.根据权利要求1所述的检测SQL语句中字段的方法,其特征在于,根据解析结果判断每个SQL字段是否为标准字段包括:若解析结果中某个SQL字段中不包含常量字符串,则判断该SQL字段为标准字段;若解析结果中某个SQL字段中包含常量字符串,则判断该SQL字段为非标准字段。4.根据权利要求1所述的检测SQL语句中字段的方法,其特征在于,根据所述语法规则从最外层开始逐层查找select语句,当最外层是多selectunion的格式时,先查找最上一层的select语句。5.根据权利要求1所述的检测SQL语句中字段的方法,其特征在于,判断每层select语句中的字段是否为正确字段包括:当某层select语句中的字段能够由from、join涉及的表提供时,判断该层select语句中的字段为正确的字段信息;当某层select语句中的字段不能够由from、join涉及的表提供时,判断该层select语句中的...

【专利技术属性】
技术研发人员:杨娟杨再飞翟士丹邵伯仲
申请(专利权)人:北京海致星图科技有限公司
类型:发明
国别省市:

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

1