CN111949541B - 多源数据库语句检查方法及装置 - Google Patents
多源数据库语句检查方法及装置 Download PDFInfo
- Publication number
- CN111949541B CN111949541B CN202010820413.XA CN202010820413A CN111949541B CN 111949541 B CN111949541 B CN 111949541B CN 202010820413 A CN202010820413 A CN 202010820413A CN 111949541 B CN111949541 B CN 111949541B
- Authority
- CN
- China
- Prior art keywords
- structured query
- database
- rule
- statement
- analyzed
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000004458 analytical method Methods 0.000 claims abstract description 38
- 238000007689 inspection Methods 0.000 claims abstract description 22
- 238000004590 computer program Methods 0.000 claims description 17
- 238000004140 cleaning Methods 0.000 claims description 5
- 230000014509 gene expression Effects 0.000 claims description 5
- 238000003860 storage Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 229910021532 Calcite Inorganic materials 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种多源数据库语句检查方法及装置,可用于大数据技术领域,所述方法包括:对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树;根据待分析结构化查询语句对应的数据库确定预设规则;通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果,本发明可实现多源数据库的结构化查询语句的检查,以提高结构化查询语句的准确度和执行效率。
Description
技术领域
本发明涉及数据库技术领域,特别涉及大数据技术领域,尤其涉及一种多源数据库语句检查方法及装置。
背景技术
随着互联网技术的不断发展,对于数据信息的存储已不仅限于单一的单机关系型数据库,越来越多的企业开始使用分布式数据库以及大数据技术来处理海量数据场景,通过编写SQL(结构化查询语言),对数据库中的数据进行操作。对于业务人员、数据分析师等人员来说,面对多种异构数据源,如果不熟悉每种数据源的特性,则易写出执行效率低下的SQL脚本。在生产环境中,执行效率低下的SQL脚本会占用较多计算机资源,进而影响其他业务的正常开展。
面对企业每天大量的数据库查询请求,传统DBA(数据库管理员)审核SQL的方式,存在速度慢和易出错的问题。在现有技术中,对数据库语句进行效率检测或分析的方法通常是根据版本控制装置,自动获取修改文件及语句,然后提交至对应数据库,通过执行进行检查。但是,现有的语句分析方法,需要通过与数据库连接以将语句提交至具体数据库获取语句执行计划进行检查,需要消耗数据库资源进行分析。
发明内容
为了解决以上问题的至少之一,本发明的一个目的在于提供一种多源数据库语句检查方法,实现多源数据库的结构化查询语句的检查,以提高结构化查询语句的准确度和执行效率。本发明的另一个目的在于提供一种多源数据库语句检查装置。本发明的再一个目的在于提供一种计算机设备。本发明的还一个目的在于提供一种可读介质。
为了达到以上目的,本发明一方面公开了一种多源数据库语句检查方法,包括:
对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树;
根据待分析结构化查询语句对应的数据库确定预设规则;
通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果。
优选的,所述方法进一步包括在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树,之前:
根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句。
优选的,所述预设的数据库拆分规则包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
优选的,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确中的至少之一。
优选的,进一步包括:
接收更新的预设规则文件;
根据所述预设规则文件的规则内容确定所述预设规则文件对应的数据库;
将所述预设规则文件对应的规则信息添加至规则列表中,其中,每个规则列表中存储有数据库标识和对应的所有预设规则信息,所述预设规则信息用于标识对应的预设规则。
优选的,所述根据待分析结构化查询语句对应的数据库确定预设规则具体包括:
根据待分析结构化查询语句对应的数据库确定规则列表,所述规则列表中包括按照风险等级排列的多个预设规则信息;
根据规则列表中的多个预设规则信息依次获取对应的预设规则以进行规则分析。
优选的,所述根据待分析结构化查询语句对应的数据库确定预设规则具体包括:
根据待分析结构化查询语句对应的数据库确定能够用于对所述待分析结构化查询语句进行检查的所有预设规则;
确定所述预设规则中每个预设规则是否具有白名单标签,若否,则作为用于分析所述结构化查询语句的预设规则。
优选的,所述方法进一步包括在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树,之前:
通过正则表达式对结构化查询语句进行清洗;
对清洗后的结构化查询语句进行格式化处理。
本发明还公开了一种多源数据库语句检查装置,包括:
语句解析单元,用于对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树;
规则确定单元,用于根据待分析结构化查询语句对应的数据库确定预设规则;
语句检查单元,用于通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果。
优选的,进一步包括文件拆分单元,用于在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前,根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句。
优选的,所述预设的数据库拆分规则包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
优选的,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确中的至少之一。
本发明还公开了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,
所述处理器执行所述程序时实现如上所述方法。
本发明还公开了一种计算机可读介质,其上存储有计算机程序,
该程序被处理器执行时实现如上所述方法。
本发明通过对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树,并根据待分析结构化查询语句对应的数据库确定可用于解析该结构化查询语句的预设规则,通过匹配的预设规则对抽象语法树节点的结构化查询语句进行规则分析,得到结构化查询语句的检查结果,可将该分析结果反馈给用户使用户可确定结构化查询语句中是否存在错误或效率低的问题,从而能够及早发现问题并及时调整,提高结构化查询语句的准确度和执行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本发明多源数据库语句检查方法一个具体实施例的流程图;
图2示出本发明多源数据库语句检查方法一个具体实施例对结构化查询语句预处理的流程图;
图3示出本发明多源数据库语句检查方法一个具体实施例预设规则动态更新的流程图;
图4示出本发明多源数据库语句检查方法一个具体例子中预设规则动态更新的流程图;
图5示出本发明多源数据库语句检查方法一个具体实施例根据风险等级确定预设规则的流程图;
图6示出本发明多源数据库语句检查方法一个具体实施例根据白名单标签确定预设规则的流程图;
图7示出本发明多源数据库语句检查方法一个具体例子中确定预设规则的流程图;
图8示出本发明多源数据库语句检查系统一个具体实施例的结构图;
图9示出本发明多源数据库语句检查系统一个具体实施例包括文件拆分单元的结构图;
图10示出适于用来实现本发明实施例的计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本申请可用于大数据技术领域,也可用于除大数据技术领域之外的任意领域,本申请的应用技术领域不作限定。
为了解决现有技术的问题,根据本发明的一个方面,本实施例公开了一种多源数据库语句检查方法。如图1所示,本实施例中,所述方法包括:
S100:对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树。
S200:根据待分析结构化查询语句对应的数据库确定预设规则。
S300:通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果。优选的,可通过深度优先搜索遍历抽象语法树的每个节点,防止节点遗漏,当然,在实际应用中,也可以选择其他的遍历方法,本发明对此并不作限定。
本发明通过对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树,并根据待分析结构化查询语句对应的数据库确定可用于解析该结构化查询语句的预设规则,通过匹配的预设规则对抽象语法树节点的结构化查询语句进行规则分析,得到结构化查询语句的检查结果,可将该分析结果反馈给用户使用户可确定结构化查询语句中是否存在错误或效率低的问题,从而能够及早发现问题并及时调整,提高结构化查询语句的准确度和执行效率,通过检查并优化降低低效语句对数据库资源的占用,且检查阶段无需再提交到数据库获取语句执行计划。
在优选的实施方式中,可通过语法解析器解析SQL语句得到抽象语法树(AST)。需要说明的是,在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,将SQL语句解析得到抽象语法树,抽象语法树的每个节点与实现一定操作的SQL语句对应。之所以说语法是"抽象"的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
为了支持多源数据库的SQL语句的解析,本实施例的语法解析器支持多种数据库的语法解析。例如,可采用Druid中内置的语法解析器,该语法解析器支持Mysql、Oracle和Hive等多种数据库的语法解析。此外,当采用Apache Calcite内置的语法解析器时,可通过在扩展Parser.jj文件中增加语法规则,以增加对特定数据库对应的SQL语句解析的特定语法支持,得到支持多源数据库SQL语句解析的语法解析器。
在优选的实施方式中,所述方法进一步包括在S100对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前:
S010:根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句。
可以理解的是,在获得的结构化查询文件中,可能存在需提交至多个不同类型的数据库中进行执行的多个结构化查询语句,例如,客户信息放在orcale数据库,客户操作日志信息放在Hive数据库,储存信息的数据库不同,则需要不同的数据库对应的SQL语句进行操作。其中,结构化查询语言(Structured Query Language,SQL)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。例如,每个结构化查询语句可以是实现一个查询(select)操作,也可以是实现建表操作(create table)、插入操作(insert into)、删除(delete)和修改(update)等对应的数据库支持的操作。不同的结构化查询语句需要不同的预设规则进行检查,从而可将获取的结构化查询文件根据对应的数据库的不同进行拆分,再对拆分得到的待分析结构化查询语句进行规则分析,从则实现对多源数据库的结构化查询语句的检查。
需要说明的是,结构化查询文件可以从文件流、网络流和本地方法调用等文件中的至少之一获取,也可以通过用户预先存储等其他方式获取得到,本发明对此并不作限定。
在优选的实施方式中,如图2所示,所述方法进一步包括在S100对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树,之前:
S020:通过正则表达式对结构化查询语句进行清洗。
S030:对清洗后的结构化查询语句进行格式化处理。
可以理解的是,在该优选的实施方式中,在对SQL语句进行解析之前可对各数据库对应的SQL语句进行清洗和格式化处理。其中,通过正则表达式对SQL语句进行数据清洗可以过滤注释等非SQL语句。进一步的,对清洗后的结构化查询语句进行格式化处理可以替换多余的不可见字符等。
在优选的实施方式中,所述预设的数据库拆分规则可包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
可以理解的是,在可选的实施方式中,可通过数据库标识对结构化查询文件进行拆分,可快速、准确的确定各个SQL语句的数据库并将结构化查询文件进行拆分。该数据库标识可以是结构化查询文件中预先设置的,也可以对结构化查询文件中的数据进行分析得到的,本发明对此并不作限定。优选的,数据库标识包括用户名、地区、数据库类型和Hadoop集群标识等标识的至少之一。其中,数据库可搭建在Hadoop集群中,当存在多种版本的Hadoop集群同时使用的情况时,有些SQL语句可能在高版本中可以正常运行,但是在低版本中运行时可能会存在性能问题。这就需要用Hadoop集群标识来区分,通过校验Hadoop集群标识检查SQL语句是否与当前版本的Hadoop集群相适应。
在其他的实施方式中,每个数据库中均具有一些用于索引的预设元数据,通过对SQL语句中包含的元数据进行分析可确定SQL语句应用的数据库。例如,数据库元数据可包括schema信息、数据库信息、表信息、字段名、字段类型和分区信息等的至少之一。比对获取的结构化查询文件中的SQL语句中的schema信息、数据库信息、表信息、字段名、字段类型或分区信息等信息是否与一个数据库的元数据相同,若是,表示该SQL语句需要对该数据库进行操作,从而确定该SQL语句对应的数据库。其中,在进行元数据比对时,可选择一个元数据进行比对,也可选择多个元数据进行比对,以提高确定的数据库的准确度。
在一个具体例子中,当数据库标识为数据库类型时,假设hive数据库有两条预设规则:R0001:语句中不允许使用select*操作以及R0002:语句中不允许使用count(distinct)操作。Mysql数据库有两条规则:M001:请勿使用replace into以及M002:Orderby rand()。使用时,用户可以通过rest接口或方法调用等方式调用检查的接口对SQL语句进行检查。以rest接口为例,用户的sql为提交到hive库中执行,则以json方式形成如下信息对SQL语句进行检查:
则返回检查结果为:
其中,id表示预设规则id号,name表示预设规则描述,level表示预设规则的风险等级,sql表示违反规则的sql语句片段,position表示违反规则的sql片段所在的行号。
在优选的实施方式中,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确。
可以理解的是,对于根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确的预设规则,可根据数据库中的元数据对SQL语句中包含的数据库元数据是否准确进行检查,以分析SQL是否存在错误。优选的,可预先存储和维护不同数据库的元数据,在语句检查时可直接调用,可避免多次查询的网络、IO消耗,提供缓存以满足多次重复的数据库元数据查询需要。此外,通过数据库的元数据还可以确定查询、group by语句、having语句、union语句和jion语句等SQL语句的执行效率。具体的,SQL语句的执行效率是通过计算执行成本确定的,即计算资源消耗量(cost)确定的,其中cost的计算为本领域常用技术,例如,假设根据元数据信息可知:数据库中的t1和t2是两张数据量很大的表,t3是一张很小的表。对于以下查询语句:SELECT a,b,c FROM t1 join t2 join t3,t1 join t2,必然会占用大量的系统资源来运算,cost相对较大。对于以下查询语句:SELECT a,b,c FROM t1join t3 join t2,t1 join t3则相对得到的结果集小很多,cost也相对较小。
此外,对于确定结构化查询语句的语法是否准确的预设规则。SQL语句的编写需要符合现有SQL编程语言的语法规则,对于符合语法规则编写的SQL语句才能够正确执行。因此,根据SQL编程语言的语法规则可以形成预设规则对SQL语句进行语法检查及正确性检查,能够分析得到SQL语句中执行效率低或语法错误的SQL语句。
其中,在通过服务器等装置对SQL语句进行分析时,对于确定结构化查询语句的语法是否准确的预设规则,可以预先存储在装置本地,从而即使在脱机情况下,依然可以从本地获取该预设规则对SQL语句进行检查,而对于通过采用元数据进行SQL语句分析的预设规则,也可预先将元数据存储在本地,用于脱机SQL语句分析,可定期联机对元数据进行更新。若将元数据存储在其他服务器等装置上,仅过通过联机的方式采用该预设规则对SQL语句进行分析。
在优选的实施方式中,如图3所示,进一步包括:
S410:接收更新的预设规则文件。
S420:根据所述预设规则文件的规则内容确定所述预设规则文件对应的数据库。
S430:将所述预设规则文件对应的规则信息添加至规则列表中,其中,每个规则列表中存储有数据库标识和对应的所有预设规则信息,所述预设规则信息用于标识对应的预设规则。
可以理解的是,在该优选的实施方式中,支持对于预设规则的在线更新。具体的,为了支持多源数据库SQL语句的检查,可预先设置多个数据库的规则列表,其中每个规则列表对应于一个规则库,规则列表存储有一个数据库的数据库标识及其对应的预设规则信息,所述预设规则信息用于标识对应的预设规则。一个规则列表的预设规则可存储在对应的规则库中,从而在确定可用的预设规则时,可根据SQL语句中的数据库标识在规则列表中查询与数据库标识对应的所有预设规则信息,进一步可根据预设规则信息将查询到的预设规则从规则库中读取并通过预设规则对SQL语句进行检查。其中,预设规则信息用于标识对应的预设规则,即预设规则信息可为预设规则的存储位置、规则号(ID)和规则名称(name)等用于获取预设规则的信息的至少之一。
在具体实现时,可基于Java SPI技术及Apache Calcite,获取预设规则并执行,即可对更新后的规则库的预设规则读取并更新规则列表,实现预设规则的更新。在一个例子中,以基于Java SPI技术及Apache Calcite的规则实现为例:定义一个顶层规则读取接口ISqlRule,指定实现类应提供的具体方法。具体的实现代码如下:
上述接口定义只是一个示例,具体实施过程中,可以根据需要,也可以采用其他的方法调用规则列表中的预设规则。
对于不同数据库对应的预设规则,可定义不同的子接口,例如IHiveRule,IMysqlRule和IMppRule等。子接口均继承于ISqlRule,用于调用各个数据库对应的具体预设规则。以Hive的规则为例,子接口IHiveRule如下:
public interface IHiveRule extends ISqlRule{
}
具体实现规则类HiveRule1如下:
其中,可通过ServiceLoader的load方法,加载实现不同子接口的具体预设规则,并将同一种数据库的预设规则信息保存在哈希表的同一个节点的链表(规则列表)中,通过接口函数可得到预设规则的规则号和规则名称,进一步从预设规则库中调用对应的预设规则。
进一步的,基于预设规则的调用接口,可基于新增的分析规则内容形成新的预设规则。然后通过自动调用预设规则的方式更新规则列表。具体的,如图4所示,在一个例子中,可通过以下步骤实现预设规则的更新:
步骤S201:创建数据库预设规则调用的规则接口,例如,本实施例中所述的IHiveRule、ISqlRule等。
步骤S202:重写通用的规则接口中的方法,如上文中的getId、getName、check方法。其中,check方法中需要实现对应规则的检查逻辑,返回是否匹配的标志,即需要将新增的分析规则内容增加至check中,形成新的预设规则。
步骤S203:编写完具体规则后,生成预设规则文件。以基于Java SPI技术的开发为例,需要在生成的jar包中,创建META-INF/services目录,在目录下增加以实现的接口的全限定名命名的文本文件,文件内容为步骤S201中创建的类的全限定名。
步骤S204:将步骤S203中的规则文件,通过Restful接口的方式,提交到指定的磁盘目录下,即提交到对应数据库的规则库中。
步骤S205:通过Restful接口触发规则维护模块,重新加载某个数据源的所有规则。
更优选的,用户向对应规则库提交新的预设规则文件。出于安全考虑,用户在提交前,可获取token令牌,在上传规则jar包的时候,带上token。通过rest接口以multipart/form-data的格式上传文件到规则库中。
典型的rest接口调用请求可通过如下伪代码实现:
POST xxx/xxx;
Content-Type:multipart/form-data;
请求体:
jar包文件。
在优选的实施方式中,如图5所示,所述S200根据待分析结构化查询语句对应的数据库确定预设规则具体包括:
S210:根据待分析结构化查询语句对应的数据库确定规则列表,所述规则列表中包括按照风险等级排列的多个预设规则信息。
S220:根据规则列表中的多个预设规则信息依次获取对应的预设规则以进行规则分析。
可以理解的是,在该优选的实施方式中,用户可根据各个预设规则检查的内容的风险等级将多个预设规则按照风险等级排列,可以实现重要的预设规则先分析,次要重要的预设规则后分析的目的。
在优选的实施方式中,如图6所示,所述S200根据待分析结构化查询语句对应的数据库确定预设规则具体可包括:
S230:根据待分析结构化查询语句对应的数据库确定能够用于对所述待分析结构化查询语句进行检查的所有预设规则。
S240:确定所述预设规则中每个预设规则是否具有白名单标签,若否,则作为用于分析所述结构化查询语句的预设规则。
可以理解的是,在该优选的实施方式中,用户可根据需要为预设规则设置白名单标签,当预设规则设有白名单标签时,表示该预设规则在白名单中,将不再采用该预设规则进行检测分析,从而用户可根据需要自定义用于对SQL语句分析检测的预设规则,极大的提高了对SQL语句分析检测的灵活性。在一个具体例子中,hive库有两条规则:R0001:语句中不允许使用select*操作,R0002:语句中不允许使用count(distinct)操作。用户A订阅了R0001规则,添加R0002到白名单,则根据白名单标签进行预设规则分析可通过以下步骤实现:
用户A通过rest接口发送如下信息:
则返回结果为:
优选的,可通过以上设置白名单标签和风险等级排序两种方式的至少之一确定预设规则。如图7所示,在一个具体例子中,可通过以下步骤确定可用的预设规则:
步骤S301:根据SQL语句的数据库标识,获取规则列表。
步骤S302:遍历步骤S301中获取的规则列表,规则列表中的预设规则按照风险等级排列。
步骤S303:所有预设规则是否匹配完成,即确定所有预设规则是否均对SQL语句进行检查,若是,则表示所有预设规则已匹配完成。已完成,跳转至步骤S307。
步骤S304:调用预设规则的分析方法,分析检查SQL中是否有违反规则的情况。若没有,返回步骤S302。若有则执行步骤S305。
步骤S305:判断已匹配的规则是否具有白名单标签。若是,表示预设规则在白名单中,对于白名单中预设规则的匹配分析结果无需向用户反馈,返回步骤S302。否则,执行步骤S306。
步骤S306:将匹配的预设规则的分析结果加入语句检查结果形成的结果集合。返回步骤S302。
步骤S307:结束,返回结果集合。
基于相同原理,本实施例还公开了一种多源数据库语句检查装置。如图8所示,本实施例中,所述装置包括语句解析单元11、规则确定单元12和语句检查单元13。
其中,所述语句解析单元11用于对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树。
所述规则确定单元12用于根据待分析结构化查询语句对应的数据库确定预设规则。
所述语句检查单元13用于通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果。
在优选的实施方式中,如图9所示,所述装置进一步包括文件拆分单元10。文件拆分单元10用于在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前,根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句。
在优选的实施方式中,所述预设的数据库拆分规则包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
在优选的实施方式中,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确中的至少之一。
由于该装置解决问题的原理与以上方法类似,因此本装置的实施可以参见方法的实施,在此不再赘述。
上述实施例阐明的装置、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机设备,具体的,计算机设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
在一个典型的实例中计算机设备具体包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述方法。
下面参考图10,其示出了适于用来实现本申请实施例的计算机设备600的结构示意图。
如图10所示,计算机设备600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM))603中的程序而执行各种适当的工作和处理。在RAM603中,还存储有装置600操作所需的各种程序和数据。CPU601、ROM602、以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶反馈器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包括用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、装置或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (11)
1.一种多源数据库语句检查方法,其特征在于,包括:
对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树;
根据待分析结构化查询语句对应的数据库确定预设规则;
通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果;
所述方法进一步包括在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前:
根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句;
所述方法进一步包括在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前:
通过正则表达式对结构化查询语句进行清洗;
对清洗后的结构化查询语句进行格式化处理。
2.根据权利要求1所述的多源数据库语句检查方法,其特征在于,所述预设的数据库拆分规则包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
3.根据权利要求1所述的多源数据库语句检查方法,其特征在于,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确中的至少之一。
4.根据权利要求1所述的多源数据库语句检查方法,其特征在于,进一步包括:
接收更新的预设规则文件;
根据所述预设规则文件的规则内容确定所述预设规则文件对应的数据库;
将所述预设规则文件对应的规则信息添加至规则列表中,其中,每个规则列表中存储有数据库标识和对应的所有预设规则信息,所述预设规则信息用于标识对应的预设规则。
5.根据权利要求1所述的多源数据库语句检查方法,其特征在于,所述根据待分析结构化查询语句对应的数据库确定预设规则具体包括:
根据待分析结构化查询语句对应的数据库确定规则列表,所述规则列表中包括按照风险等级排列的多个预设规则信息;
根据规则列表中的多个预设规则信息依次获取对应的预设规则以进行规则分析。
6.根据权利要求1所述的多源数据库语句检查方法,其特征在于,所述根据待分析结构化查询语句对应的数据库确定预设规则具体包括:
根据待分析结构化查询语句对应的数据库确定能够用于对所述待分析结构化查询语句进行检查的所有预设规则;
确定所述预设规则中每个预设规则是否具有白名单标签,若否,则作为用于分析所述结构化查询语句的预设规则。
7.一种多源数据库语句检查装置,其特征在于,包括:
语句解析单元,用于对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树;
规则确定单元,用于根据待分析结构化查询语句对应的数据库确定预设规则;
语句检查单元,用于通过预设规则对抽象语法树节点的结构化查询语句进行规则分析得到语句检查结果;
进一步包括文件拆分单元,用于在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前,根据预设的数据库拆分规则将结构化查询文件拆分为与不同数据库分别对应的多个待分析结构化查询语句;
所述装置进一步用于在对多个数据库分别对应的待分析结构化查询语句进行语法解析得到抽象语法树之前通过正则表达式对结构化查询语句进行清洗;对清洗后的结构化查询语句进行格式化处理。
8.根据权利要求7所述的多源数据库语句检查装置,其特征在于,所述预设的数据库拆分规则包括通过结构化查询文件中的数据库标识将结构化查询文件折分为与不同数据库分别对应的多个待分析结构化查询语句和/或通过结构化查询文件中的数据库元数据信息将结构化查询文件折分为与不同数据库分别匹配的多个待分析结构化查询语句。
9.根据权利要求7所述的多源数据库语句检查装置,其特征在于,所述预设规则包括根据数据库元数据确定结构化查询语句中的数据库元数据信息是否准确、确定结构化查询语句的执行效率和/或确定结构化查询语句的语法是否准确中的至少之一。
10.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,
所述处理器执行所述程序时实现如权利要求1-6任一项所述方法。
11.一种计算机可读介质,其上存储有计算机程序,其特征在于,
该程序被处理器执行时实现如权利要求1-6任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820413.XA CN111949541B (zh) | 2020-08-14 | 2020-08-14 | 多源数据库语句检查方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820413.XA CN111949541B (zh) | 2020-08-14 | 2020-08-14 | 多源数据库语句检查方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111949541A CN111949541A (zh) | 2020-11-17 |
CN111949541B true CN111949541B (zh) | 2024-03-22 |
Family
ID=73342448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010820413.XA Active CN111949541B (zh) | 2020-08-14 | 2020-08-14 | 多源数据库语句检查方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949541B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445812B (zh) * | 2020-11-27 | 2022-09-20 | 中原银行股份有限公司 | 一种结构化查询语句处理方法及装置 |
CN112506951B (zh) * | 2020-12-07 | 2023-02-24 | 海南车智易通信息技术有限公司 | 数据库慢查询日志的处理方法、服务器、计算设备和系统 |
CN112541002A (zh) * | 2020-12-09 | 2021-03-23 | 北京奇艺世纪科技有限公司 | 程序语言转换方法、装置、电子设备及存储介质 |
CN113190422B (zh) * | 2021-03-22 | 2022-05-13 | 云和恩墨(北京)信息技术有限公司 | Sql语句的质量分析方法、装置、终端及介质 |
CN113051253A (zh) * | 2021-04-15 | 2021-06-29 | 广州云族佳科技有限公司 | 一种构建标签数据库的方法和装置 |
CN113312373A (zh) * | 2021-05-12 | 2021-08-27 | 上海哲锦信息科技有限公司 | 一种数据结构化查询语句的解析方法及设备 |
CN113901083B (zh) * | 2021-09-14 | 2023-05-12 | 北京柏睿数据技术股份有限公司 | 基于多解析器的异构数据源操作资源解析定位方法和设备 |
CN113742371B (zh) * | 2021-11-08 | 2022-02-15 | 北京安华金和科技有限公司 | 一种sql语句块分析处理方法和装置 |
CN114896269A (zh) * | 2022-05-31 | 2022-08-12 | 北京达佳互联信息技术有限公司 | 结构化查询语句检测方法、装置、电子设备及存储介质 |
CN115495276A (zh) * | 2022-11-18 | 2022-12-20 | 北京奥星贝斯科技有限公司 | 一种异常检测方法、装置、设备及可读存储介质 |
CN117077625B (zh) * | 2023-08-15 | 2024-05-14 | 普蕊斯(上海)医药科技开发股份有限公司 | 一种不良事件等级判定方法、电子设备和存储介质 |
CN117453578B (zh) * | 2023-12-25 | 2024-04-19 | 杭州云动智能汽车技术有限公司 | 一种nmea语句检测方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572979A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 一种处理结构化查询语言sql的方法及装置 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN111522816A (zh) * | 2020-04-16 | 2020-08-11 | 云和恩墨(北京)信息技术有限公司 | 基于数据库引擎的数据处理方法、装置、终端及介质 |
-
2020
- 2020-08-14 CN CN202010820413.XA patent/CN111949541B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572979A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 一种处理结构化查询语言sql的方法及装置 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN111522816A (zh) * | 2020-04-16 | 2020-08-11 | 云和恩墨(北京)信息技术有限公司 | 基于数据库引擎的数据处理方法、装置、终端及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111949541A (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111949541B (zh) | 多源数据库语句检查方法及装置 | |
CN111522816B (zh) | 基于数据库引擎的数据处理方法、装置、终端及介质 | |
CN110291517B (zh) | 图数据库中的查询语言互操作性 | |
US11392599B2 (en) | Multi-tenancy for structured query language (SQL) and non structured query language (NOSQL) databases | |
US10885056B2 (en) | Data standardization techniques | |
US8943059B2 (en) | Systems and methods for merging source records in accordance with survivorship rules | |
US8065323B2 (en) | Offline validation of data in a database system for foreign key constraints | |
CN110795455A (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US11921750B2 (en) | Database systems and applications for assigning records to chunks of a partition in a non-relational database system with auto-balancing | |
US11720589B2 (en) | System and method for transformation of unstructured document tables into structured relational data tables | |
US10452628B2 (en) | Data analysis schema and method of use in parallel processing of check methods | |
US20160321277A1 (en) | Data constraints for polyglot data tiers | |
US20210209098A1 (en) | Converting database language statements between dialects | |
CN110019314B (zh) | 基于数据项分析的动态数据封装方法、客户端和服务端 | |
US11487742B2 (en) | Consistency checks between database systems | |
US10650028B2 (en) | Relational database instruction validation | |
US10901963B2 (en) | Database entity analysis | |
CN113760947A (zh) | 一种数据中台、数据处理方法、装置、设备及存储介质 | |
CN114091426A (zh) | 一种处理数据仓库中字段数据的方法和装置 | |
US11630829B1 (en) | Augmenting search results based on relevancy and utility | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
US11720563B1 (en) | Data storage and retrieval system for a cloud-based, multi-tenant application | |
CN115794858A (zh) | 查询语句处理方法、装置、设备及存储介质 | |
US11720553B2 (en) | Schema with methods specifying data rules, and method of use | |
US9659059B2 (en) | Matching large sets of words |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |