CN114896269A - 结构化查询语句检测方法、装置、电子设备及存储介质 - Google Patents

结构化查询语句检测方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114896269A
CN114896269A CN202210611558.8A CN202210611558A CN114896269A CN 114896269 A CN114896269 A CN 114896269A CN 202210611558 A CN202210611558 A CN 202210611558A CN 114896269 A CN114896269 A CN 114896269A
Authority
CN
China
Prior art keywords
detected
entity
statement
operand
structured query
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210611558.8A
Other languages
English (en)
Inventor
韩江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Dajia Internet Information Technology Co Ltd
Original Assignee
Beijing Dajia Internet Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Dajia Internet Information Technology Co Ltd filed Critical Beijing Dajia Internet Information Technology Co Ltd
Priority to CN202210611558.8A priority Critical patent/CN114896269A/zh
Publication of CN114896269A publication Critical patent/CN114896269A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking
    • G06F40/295Named entity recognition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开关于一种结构化查询语句检测方法、装置、电子设备及存储介质,涉及计算机技术领域。该方法包括:根据待检测语句获取待检测实体和待检测操作数,待检测实体包括从待检测语句对应的业务信息中获取的实体,待检测操作数为对待检测实体执行的操作数;根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,以根据检测结果确定出待检测语句是否符合规范。通过本申请的检测方法,使得获取的结构化查询语句更加符合业务场景需求,保证了检测过程的准确性,提高了检测后的结构化查询语句的精准性。

Description

结构化查询语句检测方法、装置、电子设备及存储介质
技术领域
本公开涉及计算机技术领域,尤其涉结构化查询语句检测方法、装置、电子设备及存储介质。
背景技术
结构化查询语言(Structured Query Language,SQL语言),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。相关技术中,将一些SQL语言的语法规范制定成统一的规范语法文本,在对SQL语句的开发规范进行检测时,使用上述统一的规范语法文本,对数据开发工程师编写的SQL语句进行核对,以确定编写的SQL语句是否符合规范。
然而,在实际业务中使用SQL语言编码的场景下,可能存在对相同含义和相同作用的SQL语句,采用不同方式编码,以适应不同的业务需求的情况。因此,采用内容单一的规范语法文本对基于SQL语句编码的文件进行规范检测时,可能导致检测结果的准确率不高。
发明内容
本公开提供一种结构化查询语句检测方法、装置、电子设备及存储介质,以至少解决相关技术中检测结果准确性低的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供了一种结构化查询语句检测方法,该方法包括:根据待检测语句获取待检测实体和待检测操作数,待检测实体包括从待检测语句对应的业务信息中获取的实体,待检测操作数为对待检测实体执行的操作数;根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,以根据检测结果确定出待检测语句是否符合规范。
在一种可能的实施方式中,根据待检测语句获取待检测实体和待检测操作数,包括:根据待检测语句包括的实体名称,将业务信息中与实体名称对应的实体,确定为待检测实体,以及将确定出的待检测实体执行的操作数,确定为待检测操作数。
另一种可能的实施方式中,在根据待检测语句包括的实体名称,将业务信息中与实体名称对应的实体,确定为待检测实体之前,包括:解析待检测语句,得到抽象语法树;从抽象语法树中抽取出实体名称。
另一种可能的实施方式中,解析待检测语句,得到抽象语法树,包括:将待检测语句拆分成包含至少一个关键词的至少一个字符段;对至少一个字符段进行语法分析,生成抽象语法树。
另一种可能的实施方式中,待检测实体还包括从待检测语句中获取的语句类型,根据待检测语句的待检测实体和待检测操作数,还包括:遍历抽象语法树的语句类型,将遍历到的语句类型,确定为待检测实体,以及,将对语句类型执行的操作数确定为待检测操作数。
另一种可能的实施方式中,待检测实体还包括从待检测语句中获取的关键字,根据待检测语句的待检测实体和待检测操作数,还包括:遍历抽象语法树的关键字,将遍历到的关键字,确定为待检测实体,以及,将对关键字执行的操作数确定为待检测操作数。
另一种可能的实施方式中,预设规则是由实体、操作数和操作符组成的表达式。
另一种可能的实施方式中,根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,包括:将预设规则中包含待检测实体的规则作为目标规则;根据目标规则,对待检测实体和待检测操作数之间的关系进行检测。
另一种可能的实施方式中,根据检测结果确定出待检测语句是否符合规范,包括:如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式相符合,则待检测语句符合规范;或,如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式不相符合,则待检测语句不符合规范。
另一种可能的实施方式中,待检测语句包括的实体名称包括表名,业务信息中获取的实体包括表状态、表数量、表类型和表层级中的一项或多项。
根据本公开实施例的第二方面,提供一种,装置包括:获取单元,被配置为执行根据待检测语句获取待检测实体和待检测操作数,待检测实体包括从待检测语句对应的业务信息中获取的实体,待检测操作数为对待检测实体执行的操作数;检测单元,被配置为执行根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,以根据检测结果确定出待检测语句是否符合规范。
在一种可能的实施方式中,获取单元,被配置为具体执行:根据待检测语句包括的实体名称,将业务信息中与实体名称对应的实体,确定为待检测实体,以及将确定出的待检测实体执行的操作数,确定为待检测操作数。
另一种可能的实施方式中,装置还包括:解析单元,被配置为执行解析待检测语句,得到抽象语法树;抽取单元,被配置为执行从抽象语法树中抽取出实体名称。
另一种可能的实施方式中,解析单元,被配置为具体执行:将待检测语句拆分成包含至少一个关键词的至少一个字符段;对至少一个字符段进行语法分析,生成抽象语法树。
另一种可能的实施方式中,解析单元,还被配置为具体执行:遍历抽象语法树的语句类型,将遍历到的语句类型,确定为待检测实体,以及,将对语句类型执行的操作数确定为待检测操作数。
另一种可能的实施方式中,解析单元,还被配置为具体执行:遍历抽象语法树的关键字,将遍历到的关键字,确定为待检测实体,以及,将对关键字执行的操作数确定为待检测操作数。
另一种可能的实施方式中,预设规则是由实体、操作数和操作符组成的表达式。
另一种可能的实施方式中,检测单元,被配置为具体执行:将预设规则中包含待检测实体的规则作为目标规则;根据目标规则,对待检测实体和待检测操作数之间的关系进行检测。
另一种可能的实施方式中,检测单元,被配置为具体执行:如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式相符合,则待检测语句符合规范;或,如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式不相符合,则待检测语句不符合规范。
另一种可能的实施方式中,待检测语句包括的实体名称包括表名,业务信息中获取的实体包括表状态、表数量、表类型和表层级中的一项或多项。
根据本公开实施例的第三方面,提供一种电子设备,包括:处理器和用于存储处理器可执行指令的存储器;其中,处理器被配置为执行可执行指令,以实现如第一方面及其任一种可能的实施方式的结构化查询语句检测方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面及其任一种可能的实施方式的结构化查询语句检测方法;或者当计算机可读存储介质中的指令由结构化查询语句检测装置执行时,使得结构化查询语句检测装置能够执行如第一方面及其任一种可能的实施方式的结构化查询语句检测方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序或指令,计算机程序或指令被处理器执行如第一方面及其任一种可能的实施方式的结构化查询语句检测方法。
本公开的实施例提供的技术方案至少带来以下有益效果:在对待检测SQL语句进行检测时,首先根据待检测语句获取待检测实体及待检测操作数,然后再利用预定义的用于检测SQL语句是否符合规范的规则,对待检测实体与待检测操作数的关系进行检测,从而实现对SQL语句的自动化检测。并且,由于上述规则至少包括用于描述业务实体与对应业务操作数之间关系的规则,上述待检测实体包括从待检测语句对应的业务信息中获取的实体,因此,本发明充分考虑到SQL语句所应用到的业务场景。相对于相关的利用内容单一的规范语法文本检测SQL语句的方式而言,检测结果更加准确,使得检测出的符合开发规范的SQL语句更加符合业务场景的需求,进而,避免了因开发的SQL语句准确性低而导致的后期维护成本高的问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种电子设备的示意图;
图2是根据一示例性实施例示出的一种结构化查询语句检测方法的流程图;
图3是根据一示例性实施例示出的又一种结构化查询语句检测方法的流程图;
图4是根据一示例性实施例示出的又一种结构化查询语句检测方法的流程图;
图5是根据一示例性实施例示出的又一种结构化查询语句检测方法的流程图;
图6是根据一示例性实施例示出的又一种结构化查询语句检测方法的流程图;
图7是根据一示例性实施例示出的又一种结构化查询语句检测方法的流程图;
图8是根据一示例性实施例示出的一种结构化查询语句检测过程的示意图;
图9是根据一示例性实施例示出的另一种结构化查询语句检测装置的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在对本公开实施例提供的结构化查询语句检测方法进行详细介绍之前,先对本公开实施例涉及的实施环境和应用场景进行简单介绍。
结构化查询语言(Structured Query Language,SQL语言),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。相关技术中,将一些SQL语言的语法规范制定成统一的规范语法文本,在对SQL语句的开发规范进行检测时,使用上述统一的规范语法文本,对数据开发工程师编写的SQL语句进行核对,以确定编写的SQL语句是否符合规范。
然而,在实际业务中使用SQL语言编码的场景下,可能存在对相同含义和相同作用的SQL语句,采用不同方式编码,以适应不同的业务需求的情况。因此,采用内容单一的规范语法文本对基于SQL语句编码的文件进行规范检测时,可能导致检测结果的准确率不高。
针对上述问题,本公开提供了一种结构化查询语句检测方法,在对待检测SQL语句进行检测时,首先根据待检测语句获取待检测实体及待检测操作数,然后再利用预定义的用于检测SQL语句是否符合规范的规则,对待检测实体与待检测操作数的关系进行检测,从而实现对SQL语句的自动化检测。
并且,由于上述规则至少包括用于描述业务实体与对应业务操作数之间关系的规则,上述待检测实体包括从待检测语句对应的业务信息中获取的实体,因此本发明充分考虑到SQL语句所应用到的业务场景。相对于相关的利用内容单一的规范语法文本检测SQL语句的方式而言,检测结果更加准确,使得检测出的符合开发规范的SQL语句更加符合业务场景的需求,进而,避免因开发的SQL语句准确性低而导致的后期维护成本高的问题。
下面对本公开涉及的实施环境(应用场景)进行简单介绍。
图1是本公开提供的一种电子设备的示意图。如图1所示,该电子设备100可以包括至少一个处理器101以及用于存储处理器可执行指令的存储器103。其中,处理器101被配置为执行存储器103中的指令,以实现以下实施例中的结构化查询语句检测方法。
在一种实现方式中,电子设备100对存储在存储器103的结构化查询语句进行检测。具体地,存储器103预先存储有预设规则和结构化查询语句对应的信息,处理器101根据上述预设规则和信息,对SQL语句是否符合开发规范进行检测,并确定出检测结果。
在另一种实现方式中,电子设备100对终端输入的结构化查询语句进行检测。
具体地,电子设备100在接收到的结构化查询语句后,获取结构化查询语句包含的语句基础信息和结构化查询语句对应的业务信息。电子设备100再根据上述获取的基础信息和业务信息对结构化查询语句进行检测。在检测过程结束后,电子设备100将检测结果发送至终端。
其中,电子设备10还可以包括通信总线102、至少一个通信接口104、输入设备106和输出设备105。
处理器101可以是一个处理器(central processing units,CPU),微处理单元,ASIC,或一个或多个用于控制本公开方案程序执行的集成电路。
通信总线102可包括一通路,在上述组件之间传送信息。
通信接口104,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。
输入设备106用于接收输入信号和输出设备105用于输出信号。
存储器103可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理单元相连接。存储器也可以和处理单元集成在一起。
其中,存储器103用于存储执行本公开方案的指令,并由处理器101来控制执行。处理器101用于执行存储器103中存储的指令,从而实现本公开方法中的功能。
在具体实现中,作为一种实施例,处理器101可以包括一个或多个CPU,例如图1中的CPU0和CPU1。
在具体实现中,作为一种实施例,电子设备100可以包括多个处理器,例如图1中的处理器101和处理器107。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
本公开实施例提供的结构化查询语句检测方法可以应用于前述图1所示的应用场景中的电子设备。为了便于理解,以下结合附图对本公开提供的结构化查询语句检测方法进行具体介绍。
图2是根据一示例性实施例示出的一种结构化查询语句检测方法的流程图,如图2所示,该结构化查询语句检测方法用于电子设备中,包括以下步骤S21和步骤S22。其电子设备可以是服务器,也可以是服务器和终端。
步骤S21:根据待检测语句获取待检测实体和待检测操作数。
其中,待检测语句可以为程序开发人员编写自定义函数时编写的结构化查询语句。
在一些应用场景中,待检测实体包括从待检测语句对应的业务信息中获取的实体,待检测操作数为对待检测实体执行的操作数。上述业务信息为待检测语句应用到的业务场景包括的信息。
详细地,在一些实施方式中,待检测语句包括的实体名称包括表名和输出库名,业务信息中获取的实体包括表状态、表数量、表类型和表层级中的一项或多项。
需要说明的是,表名可以是输出表名和输入表名。
进一步地,业务信息中获取的实体可以为输入表状态、输入表数量、输入表类型、输入表层级、输出表状态、输出表数量、输出表类型和输出表层级中的一项或多项。
示例性的,实体为输入表状态或输出表状态时,其对应的操作数可以为已上线、已下线或待下线表检测。实体为输入表数量或输入表数量时,其对应的操作数为具体数值,如1、2、3等。实体为输入表类型或输出表类型时,其对应的操作数为临时库表、物理表或视图。实体为输入表层级时,其对应操作数为表对应的数据跨层,即,表输入在数据库中的哪一层。实体为输出表层级时,其对应操作数为表对应的数据跨层,即,表输出在数据库中的哪一层。
在上述实施方式中,待检测语句包括的实体名称为表名,业务信息中获取的实体为表状态、表数量、表类型和表层级中的一项或多项。
该实施方式,明确实体名称和实体的具体范围,使得检测过程中获取的实体名称和实体更加准确,从而保证检测过程更加准确、更加快速。
针对上述待检测实体执行的操作数称为待检测操作数。
示例性的,对上述待检测实体执行的操作数可以为数值、视图或物理表等。比如,业务要求表数量必须为4,则实体表数量的操作数为4。或者,业务要求表类型必须为视图,则实体表类型的操作数为视图。或者,业务要求表类型的物理表,则实体表类型的操作数为物理表。
作为一种实施方式,如图3所示,上述步骤S21可以由以下步骤S211和步骤S212具体实施。
步骤S211,根据待检测语句包括的实体名称,将业务信息中与实体名称对应的实体,确定为待检测实体;
步骤S212,将确定出的待检测实体执行的操作数,确定为待检测操作数。
在该实施方式中,服务器先获取待检测语句中的实体名称。再确定业务信息中与上述实体名称对应的实体,以完成对业务实体有针对性的筛选。同时,将上述确定的实体作为待检测实体。以及,将该待检测实体执行的操作数,确定为待检测操作数,从而保证对待检测实体和待检测操作数据的快速获取。
在一些具体实施例中,实体名称为输入表名和/或输出表名。
示例性的,实体名称为输入表a,则输入表a对应的实体可以为输入表a状态、输入表a数量、输入表a类型、输入表a层级中的一项或多项。
需要说明的是,本申请实施方式中的实体名称与实体具体有相同属性,即二者属于同一主体特征的不同信息。也可以理解为,待检测语句包括的信息只包括实体名称,实体作为实体名称的补充信息。
上述获取方式中,根据实体名称,有针对性地从业务信息中筛选出与其实体名称对应的实体,一方面,保证获取的待检测实体是与检测过程中所需的实体,从而保证获取的待检测实体的准确性;另一方面,保证对业务信息中实体的快速获取,从而保证获取的待检测实体的快速性。
进一步地,如图4所示,在执行上述步骤S211之前先执行以下步骤S41和步骤S42,以确定出实体名称。
步骤S41:解析待检测语句,得到抽象语法树。
步骤S42:从抽象语法树中抽取出实体名称。
在该实施方式中,服务器将待检测语句解析为抽象语法树,其抽象语法数树既不依赖于具体文法,也不用依赖语言的细节,减少了解析工作量,从而提高解析速度。再从抽象语法树中抽取出实体名称,从而实现从待检测语句包括的信息中获取到实体名称。
通过上述将语句解析为抽象语法树的方式,提高语句的解析速度,从而保证获取实体名称的快速性。
在一种实施方式中,如图5所示,上述步骤S41可以由以下步骤S411和步骤S412具体实施。
步骤S411:将待检测语句拆分成包含至少一个关键词的至少一个字符段。
步骤S412:对至少一个字符段进行语法分析,生成抽象语法树。
在该实施方式中,服务器先将待检测语句拆分成一个或多个关键词的至少一个字符段,以保证语法分析过程更加顺利。再对字符段进行语法分析,生成抽象语法树。其语法分析方式,使得从抽象语法树中获取的实体名称所属的语句,均符合结构化语句通用的语法规范。
在一些具体实施例中,采用词法分析的方式,将待检测语句拆分成一个或多个关键词的字符段。以待检测语句为“视图依赖的表超过5”为例,将该待检测语句拆分为“视图和表”,其中,视图对应的实体为输出表类型,表对应的实体为输入表数量,输入表数量对应的操作数为大于5。
通过上述将语句拆分后再使用语法分析的方式,使得生成抽象语法树符合结构化语句基本的语法规范,保证抽象语法树包括的实体名称的准确性,从而保证检测过程更加精准。
作为另一种实施方式,如图6所示,上述步骤S21还可以通过以下步骤S21A具体实施,以获取待检测实体和待检测实体对应的待检测操作数。
步骤S21A:遍历抽象语法树的语句类型和/或关键字,将遍历到的语句类型和/或关键字,确定为待检测实体,以及,将对语句类型和/或关键字执行的操作数确定为待检测操作数。
其中,待检测实体还包括从待检测语句中获取的语句类型和/或关键字。
在该实施方式中,根据抽象语法树,将遍历到的语句类型和/或关键字,确定为待检测实体,以及,将对语句类型和/或关键字执行的操作数确定为待检测操作数。实现了对待检测语句自身包括的实体的获取。
在另一些实施方式中,待检测实体可以包括从待检测语句中获取的实体,其从待检测语句中获取的待检测实体可以称为语法实体。
需要说明的是,可以将语法实体作为待检测实体;也可以将业务实体作为待检测实体;也可以将语法实体和待检测实体一起作为待检测实体。对于待检测实体对应的实体对象,可以根据具体场景需求来设定,本申请对此不作具体限定。
一些实施例中,将从待检测语句中获取的语句类型和/或关键字作为待检测实体,可以理解为,从待检测语句中获取的语句实体,也可称为语法实体。
以SQL语句类型作为语法实体为例,SQL语句中不能出现create table/view语句,即,SQL语句类型的操作数为非create table/view语句。
又如,对其语法实体执行的操作数也可以为数据库模式定义语言(DataDefinition Language,DDL语句),即,SQL语句类型的操作数为DDL语句。
需要说明的是,语句类型和关键字包括自定义函数包括的语句类型和关键字。也可以还包括非自定义函数包括的语句类型和关键字。
进一步地,实体名称还包括自定义函数的函数名。则抽象语法树也包括自定义函数的函数名。根据自定义函数的函数名,获取自定义函数中语句类型和/或关键字,从而确定出自定义函数包括的语法实体及其语法实体对应的操作数。
通过上述实体获取方式中,实现对待检测语句自身包括的实体的获取,使得本申请的检测方法,也能利用预设规则对待检测语句中的语法规范进行检测,以使采用本申请的检测方法得到的检测结果更加精准。
步骤S22:根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,以根据检测结果确定出待检测语句是否符合规范。
作为一种实施方式,预设规则是由实体、操作数和操作符组成的表达式。
在该实施方式中,将预设规则用实体、操作数和操作符组成的表达式表示。其中,预设规则为实体与操作数通过操作符建立的表达关系式。
示例性的,输出表b状态=上线中,其中,实体为输出表b状态、“=”为操作符、上线中为操作数。
其中,预设规则中一个实体对应至少一个操作数。
示例性的,实体为输出表c类型,其对应的操作数可以同时为视图和物理表,其预设规则为:(输出表c类型=视图)and(输入表c类型!=物理表)。
需要说明的是,表名通常同时对应输出表和输入表。
具体地,在一个实体对应多个操作数时,预设规则由一个实体与多个操作数和多个操作符构成。其操作符可以为比较操作符、逻辑操作符、连接操作符、算数操作符和求反操作符中的一项或多项。示例性的,操作符可以为“=”、“>”、“<”、“!=”等。
需要说明的是,一个预设规则可以包括一个或多个实体。一个预设规则对应的表达式可以描述一个实体名称对应的多个实体与其多个实体对应的操作数之间的逻辑关系。
示例性的,表d对应输出表d类型和输入表d数量两种实体,视图不能依赖3张表d。则其对应的预设规则为:((输出表d类型=视图)and(输入表d数量>3))or((输出表d类型=视图)and(输入表d类型!=物理表))。
在一些实施方式中,预设规则还包括对应的预设规则描述信息,用于提示该预设规则所表达的具体含义,方便对该预设规则理解。其预设规则描述信息,详见如表1中的以预设规则描述信息同一列下的文本描述形式。
示例性的,如下表1所示,在一些具体实施方式中,预设规则从预设规则库中的预设规则描述信息获取。预设规则库中的预设规则根据如下方式构建。
详细地,根据待检测语句应用到的业务信息,确定业务需求。根据业务需求,确定预设规则描述信息。根据预设规则描述信息确定该描述信息所限制的类型,如表1中SQL语法限制和输入表输出表限制。以及根据预设规则描述信息确定该描述信息所限制的主体。其限制的主体为限制SQL语句类型、限制关键字。
需要说明的是,预设规则可以包括正向预设规则和反向预设规则。
本申请实施方式中,考虑的是当预设规则为正向预设规则的情况,即,如果符合正向预设规则,则确定为符合预设规则;如果不符合正向预设规则,则确定为不符合预设规则。预设规则为反向预设规则的情况,即如果符合反向预设规则,则确定为不符合预设规则;如果不符合反向预设规则,则确定为符合预设规则。
表1
Figure BDA0003673230070000111
Figure BDA0003673230070000121
进一步地,根据表1中的预设规则描述信息,建立预设规则,其预设规则包括正向预设规则和反向预设规则。其中,反向预设规则用于设置与业务需求不符合或语法要求不符合的操作数和对应实体之间的关系描述信息,正向预设规则用于设置与业务需求相符或与语法要求相符的操作数和对应实体之间的关系描述信息。例如,表1中限制的不符合要求的关键字和限制的不符合规范的SQL语句类型分别对应的预设规则描述信息,设置在反向预设规则中。又如,表1中的限制输出表类型与输入表类型、限制输出表类型与输入表数量、限制输出表层级与输入表层级、限制输入表状态、限制输入表类型、限制输出库名分别对应的预设规则描述信息,设置在正向预设规则中。
详细地,例如,表1预设规则描述信息中“语句中不能出现create table/view语句”对应的预设规则设置在反向预设规则中,在反向预设规则中建立的表达式为“SQL语句类型=create table/view语句”,可以理解的是,虽然该表达式中SQL语句类型为等于create table/view语句,但是因为设置在反向预设规则中,则表达式表达的含义为:SQL语句类型不能包括create table/view语句。同理,“语句中不能出现select*语句”对应的预设规则设置在反向预设规则中,其建立表达式“关键字=select*语句”,则表达式表达的含义为:SQL语句中不能包括select*语句。
又如,表1中,限制主体可以理解为对实体的限制,即将实体限制为某一状态、某一语句类型或某一数值方范围。“视图不能依赖3张表”的预设规则为:((输出表类型=视图)and(输入表数量>3))or((输出表类型=视图)and(输入表类型!=物理表))。
通过上述规则表达方式,预设规则能更加简洁更清晰地表达出实体和操作数之间的逻辑关系,以使应用预设规则检测语句的检测过程中,更加快速。在一种实施方式中,如图7所示,在执行完步骤S21后,执行以下步骤S71和S72,以实现目标规则的确定。
步骤S71:将预设规则中包含待检测实体的规则作为目标规则。
步骤S72:根据目标规则,对待检测实体和待检测操作数之间的关系进行检测。
在该实施方式中,从预设规则中,筛选出包括待检测实体的规则,并上述筛选出的规则作为目标规则,以确定出用于检测待检测语句的规则。
通过上述根据确定出的目标规则,检测待检测语句的方式,提高检测速度、保证检测结果的准确性。
在一种实施方式中,结合上述步骤S71和步骤S72,上述步骤S22还可以根据以下步骤S221和步骤S222具体实施。
步骤S221:如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式相符合,则待检测语句符合规范。
步骤S222:如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式不相符合,则待检测语句不符合规范。
在该实施方式中,将待检测实体和待检测操作数,带入到目标规则对应的表达式中,如果与表达式相符,则显示待检测语句符合规范。反之,如果与表达式不符,则显示待检测语句符合规范。
上述将目标规则对应表达式的判定结果作为检测结果的方式,逻辑简单合理,便于检测结果的获取。
作为一种具体的实施方式,如图8所示,采用结构化查询语言解析器和规则引擎对上述实施方式进行具体实施。其中,结构化查询语言解析器负责解析结构化查询语句的结构,同时验证结构化查询语句的语法是否正确;规则引擎负责存储和验证预设规则。元数据库主要存储有表状态,类型,层级,下游等业务元数据。
具体地,结构化查询语言解析器和规则引擎的工作过程如下:
其一,结构化查询语言解析器对结构化查询语句进行解析,如果解析不成功,则提示异常。如果解析成功,则生成抽象语法树。详细地,经过词法分析,将结构化查询语句拆分成包含关键词的字符段;再对字符段进行语法分析,以生成结构化语句抽象语法树。
其二,在解析成功的情况下,遍历上述抽象语法树,获取结构化查询语句中包括的基础信息,即图8的语句中的基础信息。详细地,语法树中抽取出输入表名、输出表名、使用的函数名等结构化查询语句的基础信息;再依据结构化查询语句编译原理,对结构化查询语句的基础信息进行确定。
其三,根据基础信息得到语法实体,同时,从元数据库中的业务信息筛选出与基础信息中实体名称相对应的业务实体,将语法实体业务实体构成实体集合,以作为规则引擎的输入。
其四,将得到的语法实体和业务实体输入到规则执行器中,同时规则数据库中的预设规则输入至规则执行器。规则执行器利用输入的预设规则对语法实体和业务实体,以及二者分别对应的操作数进行验证和检测,从而得到检测结果。
需要说明的是,上述语句中的基础信息包括实体名称。
在上述实施方式中,将获取的对应的业务信息中包括的实体作为待检测实体,以及将待检测实体对应的操作数作为待检测操作数,使得待检测实体和待检测操作数均与业务信息关联。再根据预设规则,检测待检测实体和待检测操作数之间的关系,以完成对待检测语句的规范检测,从而实现了对用户账户自定义的结构化查询语句规范检测的自动化检测。
通过上述检测方式,其检测过程包括了对待检测语句是否与正确的业务信息匹配的检测。因此,采用本申请的检测方法对开发的结构化查询语句进行自动检测。一方面,使得获取的结构化查询语句更加符合业务场景需求,保证检测过程的准确性,提高检测后的结构化查询语句的精准性,从而避免相关技术中,因开发的结构化查询语句准确性低而导致的后期维护成本高的问题。另一方面,保证对结构化查询语句检测的智能性。
本公开实施例还提供一种如图9所示的结构化查询语句检测装置400,装置包括:获取单元401,检测单元402,解析单元403,抽取单元404。
获取单元401,被配置为执行根据待检测语句获取待检测实体和待检测操作数,待检测实体包括从待检测语句对应的业务信息中获取的实体,待检测操作数为对待检测实体执行的操作数,例如,获取单元401用于执行图2中的步骤S21;检测单元402,被配置为执行根据预定义的用于描述实体与操作数之间关系的预设规则,对待检测实体和待检测操作数之间的关系进行检测,以根据检测结果确定出待检测语句是否符合规范,例如,检测单元402用于执行图2中的步骤S22。
在一种可能的实施方式中,获取单元401,被配置为具体执行:根据待检测语句包括的实体名称,将业务信息中与实体名称对应的实体,确定为待检测实体,以及将确定出的待检测实体执行的操作数,确定为待检测操作数。
另一种可能的实施方式中,装置还包括:解析单元403,被配置为执行解析待检测语句,得到抽象语法树;抽取单元404,被配置为执行从抽象语法树中抽取出实体名称。
另一种可能的实施方式中,解析单元403,被配置为具体执行:将待检测语句拆分成包含至少一个关键词的至少一个字符段;对至少一个字符段进行语法分析,生成抽象语法树。
另一种可能的实施方式中,解析单元403,还被配置为具体执行:遍历抽象语法树的语句类型和/或关键字,将遍历到的语句类型和/或关键字,确定为待检测实体,以及,将对语句类型和/或关键字执行的操作数确定为待检测操作数。
另一种可能的实施方式中,预设规则是由实体、操作数和操作符组成的表达式。
另一种可能的实施方式中,检测单元402,被配置为具体执行:将预设规则中包含待检测实体的规则作为目标规则;根据目标规则,对待检测实体和待检测操作数之间的关系进行检测。
另一种可能的实施方式中,检测单元402,被配置为具体执行:如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式相符合,则待检测语句符合规范;如果待检测实体和待检测操作数,与目标规则中的实体、操作数和操作符构成的表达式不相符合,则待检测语句不符合规范。
另一种可能的实施方式中,待检测语句包括的实体名称为表名,业务信息中获取的实体为表状态、表数量、表类型和表层级中的一项或多项。
关于上述实施例中的装置,其中各个单元模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开实施例还提供一种电子设备。该电子设备如图1所示包括:处理器101和用于存储处理器101可执行指令的存储器103;其中,处理器101被配置为执行可执行指令,以实现如上述任一种可能的实施方式的结构化查询语句检测方法。且能达到相同的技术效果,为避免重复,这里不再赘述。
本公开实施例还提供一种计算机可读存储介质,当计算机可读存储介质中的指令由图像处理装置或电子设备的处理器执行时,使得数据处理装置或电子设备能够执行如上述任一种可能的实施方式的结构化查询语句检测方法。且能达到相同的技术效果,为避免重复,这里不再赘述。
本公开实施例还提供一种计算机程序产品,包括计算机程序或指令,计算机程序或指令被处理器执行如上述任一种可能的实施方式的结构化查询语句检测方法。且能达到相同的技术效果,为避免重复,这里不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (10)

1.一种结构化查询语句检测方法,其特征在于,所述方法包括:
根据待检测语句获取待检测实体和待检测操作数,所述待检测实体包括从所述待检测语句对应的业务信息中获取的实体,所述待检测操作数为对所述待检测实体执行的操作数;
根据预定义的用于描述实体与操作数之间关系的预设规则,对所述待检测实体和所述待检测操作数之间的关系进行检测,以根据检测结果确定出所述待检测语句是否符合规范。
2.根据权利要求1所述的结构化查询语句检测方法,其特征在于,所述根据待检测语句获取待检测实体和待检测操作数,包括:
根据所述待检测语句包括的实体名称,将所述业务信息中与所述实体名称对应的实体,确定为所述待检测实体,以及
将确定出的所述待检测实体执行的操作数,确定为所述待检测操作数。
3.根据权利要求2所述的结构化查询语句检测方法,其特征在于,在所述根据所述待检测语句包括的实体名称,将所述业务信息中与所述实体名称对应的实体,确定为所述待检测实体之前,所述方法还包括:
解析所述待检测语句,得到抽象语法树;
从所述抽象语法树中抽取出所述实体名称。
4.根据权利要求3所述的结构化查询语句检测方法,其特征在于,所述解析所述待检测语句,得到抽象语法树,包括:
将所述待检测语句拆分成包含至少一个关键词的至少一个字符段;
对所述至少一个字符段进行语法分析,生成所述抽象语法树。
5.根据权利要求3或4所述的结构化查询语句检测方法,其特征在于,所述待检测实体还包括从所述待检测语句中获取的语句类型,所述根据待检测语句的待检测实体和待检测操作数,还包括:
遍历所述抽象语法树的语句类型,将遍历到的语句类型,确定为所述待检测实体,以及,将对所述语句类型执行的操作数确定为所述待检测操作数。
6.根据权利要求3或4所述的结构化查询语句检测方法,其特征在于,所述待检测实体还包括从所述待检测语句中获取的关键字,所述根据待检测语句的待检测实体和待检测操作数,还包括:
遍历所述抽象语法树的关键字,将遍历到的关键字,确定为所述待检测实体,以及,将对所述关键字执行的操作数确定为所述待检测操作数。
7.一种结构化查询语句检测装置,其特征在于,所述装置包括:
获取单元,被配置为执行根据待检测语句获取待检测实体和待检测操作数,所述待检测实体包括从所述待检测语句对应的业务信息中获取的实体,所述待检测操作数为对所述待检测实体执行的操作数;
检测单元,被配置为执行根据预定义的用于描述实体与操作数之间关系的预设规则,对所述待检测实体和所述待检测操作数之间的关系进行检测,以根据检测结果确定出所述待检测语句是否符合规范。
8.一种电子设备,其特征在于,包括:
处理器和用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述可执行指令,以实现如权利要求1至6中任一项所述的结构化查询语句检测方法。
9.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至6中任一项所述的结构化查询语句检测方法;或者
当所述计算机可读存储介质中的指令由结构化查询语句检测装置执行时,使得所述结构化查询语句检测方法装置能够执行如权利要求1至6中任一项所述的结构化查询语句检测方法。
10.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现权利要求1至6任一项所述的结构化查询语句检测方法。
CN202210611558.8A 2022-05-31 2022-05-31 结构化查询语句检测方法、装置、电子设备及存储介质 Pending CN114896269A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210611558.8A CN114896269A (zh) 2022-05-31 2022-05-31 结构化查询语句检测方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210611558.8A CN114896269A (zh) 2022-05-31 2022-05-31 结构化查询语句检测方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN114896269A true CN114896269A (zh) 2022-08-12

Family

ID=82726137

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210611558.8A Pending CN114896269A (zh) 2022-05-31 2022-05-31 结构化查询语句检测方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114896269A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115757462A (zh) * 2022-11-15 2023-03-07 中国科学院软件研究所 一种面向对象的数据库动态接口生成方法及操作方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073640A (zh) * 2009-11-19 2011-05-25 阿里巴巴集团控股有限公司 Sql语句的检测方法、系统及服务器
CN103744802A (zh) * 2013-12-20 2014-04-23 北京奇虎科技有限公司 Sql注入攻击的识别方法及装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN110716912A (zh) * 2018-07-12 2020-01-21 马上消费金融股份有限公司 一种sql性能检测方法及服务器
CN111949541A (zh) * 2020-08-14 2020-11-17 中国工商银行股份有限公司 多源数据库语句检查方法及装置
CN113190422A (zh) * 2021-03-22 2021-07-30 云和恩墨(北京)信息技术有限公司 Sql语句的质量分析方法、装置、终端及介质
CN113434430A (zh) * 2021-07-09 2021-09-24 中国银行股份有限公司 一种sql查询语句性能检测方法和装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073640A (zh) * 2009-11-19 2011-05-25 阿里巴巴集团控股有限公司 Sql语句的检测方法、系统及服务器
CN103744802A (zh) * 2013-12-20 2014-04-23 北京奇虎科技有限公司 Sql注入攻击的识别方法及装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN110716912A (zh) * 2018-07-12 2020-01-21 马上消费金融股份有限公司 一种sql性能检测方法及服务器
CN111949541A (zh) * 2020-08-14 2020-11-17 中国工商银行股份有限公司 多源数据库语句检查方法及装置
CN113190422A (zh) * 2021-03-22 2021-07-30 云和恩墨(北京)信息技术有限公司 Sql语句的质量分析方法、装置、终端及介质
CN113434430A (zh) * 2021-07-09 2021-09-24 中国银行股份有限公司 一种sql查询语句性能检测方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115757462A (zh) * 2022-11-15 2023-03-07 中国科学院软件研究所 一种面向对象的数据库动态接口生成方法及操作方法
CN115757462B (zh) * 2022-11-15 2023-06-06 中国科学院软件研究所 一种面向对象的数据库动态接口生成方法及操作方法

Similar Documents

Publication Publication Date Title
CN111522816B (zh) 基于数据库引擎的数据处理方法、装置、终端及介质
CN111309863B (zh) 基于知识图谱的自然语言问答方法及装置
CN104252533A (zh) 搜索方法和搜索装置
CN110597844B (zh) 异构数据库数据统一访问方法及相关设备
CN111079408A (zh) 一种语种识别方法、装置、设备及存储介质
CN109558166A (zh) 一种面向缺陷定位的代码搜索方法
CN111427784B (zh) 一种数据获取方法、装置、设备及存储介质
CN107766036B (zh) 一种模块的构建方法、构建装置及终端设备
CN112287071A (zh) 一种文本关系提取方法、装置及电子设备
CN113158695A (zh) 一种面向多语言混合文本的语义审核方法与系统
CN115599359A (zh) 一种代码生成方法、装置、设备及介质
CN111597118A (zh) 测试用例生成方法、装置、计算机设备及存储介质
CN114896269A (zh) 结构化查询语句检测方法、装置、电子设备及存储介质
CN114676678A (zh) 结构化查询语言数据的解析方法、装置和电子设备
CN108008947B (zh) 一种编程语句的智能提示方法、装置、服务器及存储介质
US20180314683A1 (en) Method and device for processing natural language
CN101727451B (zh) 信息提取方法和装置
US20230418566A1 (en) Programmatically generating evaluation data sets for code generation models
CN114116773A (zh) 一种结构化查询语言sql文本审核方法及装置
KR20150111587A (ko) 디비피디아를 활용한 uri 스포팅 시스템 및 방법
CN111401034A (zh) 文本的语义分析方法、语义分析装置及终端
CN111221843A (zh) 大数据处理方法及装置
CN113255374B (zh) 问答管理方法及系统
CN112686024B (zh) 句法解析方法及装置、电子设备、存储介质
Lee et al. A fast detecting method for clone functions using global alignment of token sequences

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination