掌桥专利:专业的专利平台
掌桥专利
首页

数据库数据查询方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 09:55:50


数据库数据查询方法、装置、电子设备及存储介质

技术领域

本发明涉及数据处理技术,尤其涉及一种数据库数据查询方法、装置、电子设备及存储介质。

背景技术

目前,NL2SQL(Natural Language to SQL)作为一项将用户的自然语句转为可执行SQL(Structured Query Language,结构化查询语言)语句的技术,对改善用户与数据库之间的交互方式有很大意义。众所周知,数据库存储了大量由于人的生产生活产生的数据,对这些数据的查询和分析已经成为大数据时代数据价值发掘的重要手段。然而对于数据库的查询,需要对结构化查询语言SQL有深入的了解,从而提升了数据分析的门槛。而NL2SQL的目标就是为了降低数据分析的门槛,让用户通过自然语言描述最近想要搜索的数据,通过AI算法将自然语言转换为正确的SQL语句,然后到数据库上进行查询,最后将查询结果返回给用户。正是由于NL2SQL技术对数据库数据查询和分析的巨大促进作用,NL2SQL技术受到了业界广泛的关注,许多数据服务商将其作为核心竞争力之一。

然而,现有的NL2SQL技术为了提高智能产品对自然语言的解析准确率,对用户的输入均进行了限制和引导,迫使用户按照固定的句式进行查询,另外,当用户查询的问题超出了处理规则范围,则不能正确解析结果,使用限制较多,容易出错,容错性较差。

发明内容

鉴于以上内容,本发明提供一种数据库数据查询方法、装置、电子设备及存储介质,其目的在于解决目前使用限制较多,容易出错,容错性较差的技术问题。

为实现上述目的,本发明提供一种数据库数据查询方法,该方法包括:

接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;

根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;

根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

在其中一实施例中,所述将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架,包括:

将得到的所述目标分词输入预先构建的预设类型深度神经网络模型的嵌入层,得到每个所述目标分词的词向量,将所述目标分词的词向量输入预先构建的预设类型深度神经网络模型的编码层,得到编码完成的词向量,将所述编码完成的词向量输入预先构建的预设类型深度神经网络模型的解码层,输出SQL语句框架。

在其中一实施例中,第一关键字包括第一子关键字和/或第二子关键字和/或操作向量符;所述第一子关键字与所述操作向量符相对应;第二子关键字与所述操作向量符不对应。

在其中一实施例中,具有对应关系的所述第一子关键字和所述操作向量符对应于同一预设指针网络;

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络之前,所述方法包括:将所述第一子关键字对应的操作向量符和每个所述目标分词作为输入数据分别输入到各个所述第一子关键字对应的预设指针网络,得到每个所述第一子关键字对应的计算完成的目标分词;

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:

将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第一子关键字对应的预设指针网络,得到每个第一子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第一子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第一子关键字对应的SQL列名。

在其中一实施例中,所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:

将每个目标分词输入到每个第二子关键字对应的预设指针网络,得到第二子关键字对应的计算完成的目标分词;将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第二子关键字对应的预设指针网络,得到每个第二子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第二子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第二子关键字对应的SQL列名。

在其中一实施例中,所述根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名包括:

从预设数据库中搜索对应所有第一关键字对应的SQL列名的数据表;

若搜索到对应所有第一关键字对应的SQL列名的数据表,则确定搜索到的数据表即为目标数据表,该目标数据表的名称即为目标表名;

若未搜索到对应所有第一关键字对应的SQL列名的数据表,则分别根据各个所述第一关键字对应的SQL列名,分别从预设数据库中找出各个所述第一关键字对应的中间数据表,并将找出的各个中间数据表的名称按照预先确定的名称连接算法进行连接,得到目标表名。

在其中一实施例中,一个所述第一关键字对应的SQL列名数量可以是一个或者多个,所述SQL列名的个数与所述占位符的个数相等。

为实现上述目的,本发明还提供一种数据库数据查询装置,所述装置包括:

接收模块,用于接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;

生成模块,用于根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;

替换模块,用于根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

为实现上述目的,本发明还提供一种电子设备,所述电子设备包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的数据库数据查询方法。

为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有数据库数据查询程序,所述数据库数据查询程序被处理器执行时,实现如上所述的数据库数据查询方法的步骤。

本发明提出的数据库数据查询方法、装置、电子设备及存储介质,接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。本发明能够支持用户按正常的语言方式输入查询语句使用限制较少,容错性较好。

附图说明

图1为本发明电子设备较佳实施例的示意图;

图2为本发明数据库数据查询装置较佳实施例的模块示意图;

图3为本发明数据库数据查询方法较佳实施例的流程图;

本发明目的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参照图1所示,为本发明电子设备1较佳实施例的示意图。

该电子设备1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子设备1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。

其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子设备1的内部存储单元,例如该电子设备1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子设备1的外部存储设备,例如该电子设备1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子设备1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子设备1的操作系统和各类应用软件,例如数据库数据查询程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。

处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子设备1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行数据库数据查询程序10的程序代码等。

显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子设备1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。

网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子设备1与其它电子设备之间建立通信连接。

图1仅示出了具有组件11-14以及数据库数据查询程序10的电子设备1和云端数据库2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

可选地,所述电子设备1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。

该电子设备1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。

在上述实施例中,处理器12执行存储器11中存储的数据库数据查询程序10时可以实现如下步骤:

接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;

根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;

根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

关于上述步骤的详细介绍,请参照下述图2关于数据库数据查询装置100实施例的功能模块图以及图3关于数据库数据查询方法实施例的流程图的说明。

参照图2所示,为本发明数据库数据查询装置100的功能模块图。

本发明所述数据库数据查询装置100可以安装于电子设备中。根据实现的功能,所述数据库数据查询装置100可以包括接收模块110、生成模块120和替换模块130。本发明中所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。

在本实施例中,关于各模块/单元的功能如下:

接收模块110,用于接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符。

在本实施例中,将所述目标分词输入预先构建的预设类型深度神经网络模型,得到对应的结构化查询语言(SQL,Structured Query Language)语句框架。具体地,将原查询语句的目标分词输入预先构建的预设类型深度神经网络模型,目标分词经过预先构建的预设类型深度神经网络模型的嵌入层,得到每个目标分词的词向量,将所述目标分词的词向量输入预先构建的预设类型深度神经网络模型的编码层(即第一LSTM层),得到编码完成的词向量,将编码完成的词向量输入到预先构建的预设类型深度神经网络模型的解码层(即第二LSTM层),输出SQL语句框架。其中,所述预先构建的预设类型深度神经网络模型为为长短期记忆(Long short-term memory,LSTM)模型,第一关键字和第二关键字均是SQL语句中固定不变(值域固定)的字词,第一关键字用于连接列名,第一关键字可以包括select、where、group、by、order、having、limit、asc、desc等字词以及操作向量符,进一步地,第一关键字包括第一子关键字和/或第二子关键字和/或操作向量符。第一子关键字可以包括where、having等与操作向量符相对应的字词(即第一子关键字与操作向量符具有绑定关系,存在第一子关键字也必然存在其对应的操作向量符,同样的,若不存在第一子关键字也必然不存在其对应的操作向量符,例如where对应“>”等操作向量符);第二子关键字可以包括select、group、by、order、limit、asc、desc等与操作向量符不对应(即相互独立)的字词。第二关键字用于连接表名,第二关键字可以包括from。占位符用来替换SQL语句中可变(值域不固定)的字词(例如列名和表名),本实施例中,占位符表示为col。所述SQL语句框架的各个所述第一关键字、第二关键字、占位符按预设SQL语法排列。

例如,查询语句为“show me the name,sex of students who are older than18”,查询语句经过分词处理后,得到“show”、“me”、“the”、“name”、“sex”、“of”、“students”、“who”“are”、“older”、“than”和“18”这些目标分词,将这些目标分词输入预先构建的预设类型深度神经网络模型,输出SQL语句框架,SQL语句框架为“select col colfrom where col>”。按现有的SQL语法不难看出,select后面紧跟着的两个col(即select和from之间的两个col)与select相对应,且where后面紧跟着的一个col(即where和>之间的一个col)与where相对应。

生成模块120,用于根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名。

在本实施例中,预设数据库中保存有一个或多个数据表,一个数据表包含多个列名,并且每个数据表的表名不同。在本实施例中,根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的SQL列名。例如,预设数据库中一个数据表的表名为A且该数据表的列名为name,sex和age,根据该数据表的列名和表名,得到A.name,A.sex和A.age这三个SQL列名;A.name,A.sex和A.age这三个SQL列名与该数据表的name,sex和age这三个列名一一对应,并且与表名A相对应。

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名之前,将预设数据库中的所有数据表对应的所有SQL列名输入预先构建的预设类型深度神经网络模型的嵌入层,输出各个SQL列名的词向量。所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:将所有目标分词的词向量和所有SQL列名的词向量作为输入数据分别输入到各个第一关键字对应的预设指针网络(即每个第一关键字对应的预设指针网络均收到所有目标分词的词向量和所有SQL列名的词向量,每个第一关键字对应的预设指针网络的输入相同),得到每个第一关键字对应的SQL列名。其中,一个所述第一关键字对应的SQL列名数量可以是一个或者多个,所述SQL列名的个数与所述占位符的个数相等。

需要指出的是,具有对应关系的所述第一子关键字和所述操作向量符对应于同一预设指针网络。

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络之前,所述方法包括:将第一子关键字对应的操作向量符输入预先构建的预设类型深度神经网络模型,第一子关键字对应的操作向量符经过嵌入层,得到第一子关键字对应的操作向量符的词向量。将所述第一子关键字对应的操作向量符和每个所述目标分词作为输入数据分别输入到各个所述第一子关键字对应的预设指针网络,得到每个所述第一子关键字对应的计算完成的目标分词。例如,将一个第一子关键字对应的操作向量符的词向量和所有所述目标分词的词向量一同输入到同一个第一子关键字对应的预设指针网络,得到这个第一子关键字对应的计算完成的目标分词。

将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:

将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第一子关键字对应的预设指针网络,得到每个第一子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第一子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第一子关键字对应的SQL列名。

和/或将每个目标分词输入到每个第二子关键字对应的预设指针网络,得到第二子关键字对应的计算完成的目标分词;将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第二子关键字对应的预设指针网络,得到每个第二子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第二子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第二子关键字对应的SQL列名。

其中,可以用向量内积来计算所述计算完成的目标分词的词向量与SQL列名的词向量的相似度。计算出一个预设指针网络对应的每个所述计算完成的目标分词词向量与每个SQL列名词向量的相似度后,进一步利用softmax函数,可得到任意一个SQL列名与任意一个计算完成的目标分词所组成的组合对应的参数值,从而找出参数值最大的组合中的SQL列名,将该SQL列名作为这一预设指针网络对应的SQL列名。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”且SQL语句框架为“select col col from where col>”为例,预设数据库中所有数据库的所有列名对应的SQL列名包括A.age、A.name、A.sex等。将每个目标分词的词向量输入到select对应的预设指针网络,得到计算完成的每个目标分词词向量,计算所有计算完成的目标分词词向量与预设数据库中所有数据库的所有列名对应的SQL列名的词向量的相似度,SQL列名A.name的词向量与计算完成的目标分词name的词向量的相似度以及SQL列名A.sex的词向量与计算完成的目标分词sex的词向量的相似度高于其他列名的词向量与计算完成的目标分词的词向量的相似度,将SQL列名A.name和A.sex作为select对应的SQL列名。可以理解的是,select指针网络预测出的SQL列名的数量与前述的SQL语句中select对应的占位符数量相同,同理,其他第一关键字的指针网络预测出的SQL列名的数量与前述的SQL语句中同一关键字对应的占位符数量相同。

需要说明的是,由于不同第一关键字对应的指针网络的参数不同,导致将相同的目标分词的词向量输入不同第一关键字对应的指针网络后,得到计算完成的目标分词词向量是不同的,进而使得各个第一关键字对应的指针网络计算得到列名与目标分词的相似度也是不同的。

替换模块130,用于根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

本实施例中,根据所述每个SQL列名以及SQL列名与数据表表名的对应关系,从预设数据库中找出对应的一个或多个数据表。可以理解的是,得到的多个SQL列名可能关联于同一个数据表中(例如预测出的SQL列名为A.name,A.sex和A.age,这三个SQL列名均关联于数据表A),也可能每个SQL列名分别关联于不同的数据表中(例如预测出的SQL列名为A.name,B.sex和C.age,这三个SQL列名分别关联于A、B、C这三个数据表中)。

进一步地,所述根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名包括:

从预设数据库中搜索对应所有第一关键字对应的SQL列名的数据表;

若搜索到对应所有第一关键字对应的SQL列名的一个数据表,则确定搜索到的数据表即为目标数据表,该目标数据表的名称即为目标表名。

若未搜索到对应所有第一关键字对应的SQL列名的数据表,则分别根据各个所述第一关键字对应的SQL列名,分别从预设数据库中找出各个所述第一关键字对应的中间数据表,并将找出的各个中间数据表的名称按照预先确定的名称连接算法进行连接,得到目标表名。

具体地,当从预设数据库中找出一个数据表时,该数据表对应于所有的SQL列名,找出的所述数据表包含所有得到的所述列名,将该数据表作为目标数据表,提取该数据表的表名,将找出的数据表的表名作为目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的列名分别替换所述SQL语句框架中所有的占位符,得到SQL语句。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”,SQL语句框架为“select col col from where col>”,第一子关键字where对应的SQL列名为A.age,且第二子关键字select对应的SQL列名为A.name和A.sex为例,根据A.name,A.sex,A.age得到对应的列名name,sex和age,根据A.name,A.sex,A.age从预设数据库中找出表名为A的数据表,数据表A包含了name,sex和age,提取该数据表的表名A,将表名加入SQL语句框架中对应位置,将列名name,sex和age分别替换SQL语句框架中对应的col后,得到SQL语句为select name,sex from A where age>。

当未搜索到对应所有第一关键字对应的SQL列名的数据表(即未找到对应所有SQL列名的一个数据表)时,分别根据各个所述第一关键字对应的SQL列名,分别从预设数据库中找出各个所述第一关键字对应的中间数据表,中间数据表的数量为至少两个,通过join操作将找出的所有中间数据表进行连接,任意一个找出的所述数据表至少包含一个得到的所述列名且不包含所有得到的所述列名,所有中间数据表的列名的并集包含所有得到的数据表列名,提取所有找出的中间数据表的表名,将提取的多个所述表名通过join连接,得到目标表名,将目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的列名分别替换所述SQL语句框架中所有的占位符,得到SQL语句。需要说明的是,每个数据表均具有主键和外键,每个表的主键不同,通过一个表的主键与其他表的外键,可将表连接起来。例如,表A包括主键“姓名”和外键“年龄”,表B包括主键“年龄”和外键“性别”,表A的外键“年龄”和表B的主键“年龄”相同,因此可以将表A和表B连接起来。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”,SQL语句框架为“select col col from where col>”为例,第一子关键字where对应的SQL列名为A.age,且第二子关键字select对应的SQL列名为B.name和C.sex。根据B.name,C.sex,A.age得到对应的列名name,sex和age,根据B.name,C.sex,A.age从预设数据库中找出表名为A、B和C的三个中间数据表,中间数据表B包含列名name,中间数据表C包含列名sex,中间数据表A包含列名age,提取该三个中间数据表的表名A、B和C,将中间数据表A、中间数据表B和中间数据表C的表名通过join连接,并加入SQL语句框架中对应位置,将列名name,sex和age分别替换SQL语句框架中对应的col后,得到SQL语句为select name,sex from A join B join C where age>。

本发明提出的数据库数据查询装置,接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。本装置能够支持用户按正常的语言方式输入查询语句使用限制较少,容错性较好。

此外,本发明还提供一种数据库数据查询方法,该方法应用于电子设备。参照图3所示,为本发明数据库数据查询方法的实施例的方法流程示意图。电子设备1的处理器12执行存储器11中存储的数据库数据查询程序10时实现数据库数据查询方法的如下步骤:

步骤S10:接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符。

在本实施例中,将所述目标分词输入预先构建的预设类型深度神经网络模型,得到对应的结构化查询语言(SQL,Structured Query Language)语句框架。具体地,将原查询语句的目标分词输入预先构建的预设类型深度神经网络模型,目标分词经过预先构建的预设类型深度神经网络模型的嵌入层,得到每个目标分词的词向量,将所述目标分词的词向量输入预先构建的预设类型深度神经网络模型的编码层(即第一LSTM层),得到编码完成的词向量,将编码完成的词向量输入到预先构建的预设类型深度神经网络模型的解码层(即第二LSTM层),输出SQL语句框架。其中,所述预先构建的预设类型深度神经网络模型为为长短期记忆(Long short-term memory,LSTM)模型,第一关键字和第二关键字均是SQL语句中固定不变(值域固定)的字词,第一关键字用于连接列名,第一关键字可以包括select、where、group、by、order、having、limit、asc、desc等字词以及操作向量符,进一步地,第一关键字包括第一子关键字和/或第二子关键字和/或操作向量符。第一子关键字可以包括where、having等与操作向量符相对应的字词(即第一子关键字与操作向量符具有绑定关系,存在第一子关键字也必然存在其对应的操作向量符,同样的,若不存在第一子关键字也必然不存在其对应的操作向量符,例如where对应“>”等操作向量符);第二子关键字可以包括select、group、by、order、limit、asc、desc等与操作向量符不对应(即相互独立)的字词。第二关键字用于连接表名,第二关键字可以包括from。占位符用来替换SQL语句中可变(值域不固定)的字词(例如列名和表名),本实施例中,占位符表示为col。所述SQL语句框架的各个所述第一关键字、第二关键字、占位符按预设SQL语法排列。

例如,查询语句为“show me the name,sex of students who are older than18”,查询语句经过分词处理后,得到“show”、“me”、“the”、“name”、“sex”、“of”、“students”、“who”“are”、“older”、“than”和“18”这些目标分词,将这些目标分词输入预先构建的预设类型深度神经网络模型,输出SQL语句框架,SQL语句框架为“select col colfrom where col>”。按现有的SQL语法不难看出,select后面紧跟着的两个col(即select和from之间的两个col)与select相对应,且where后面紧跟着的一个col(即where和>之间的一个col)与where相对应。

步骤S20:根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名。

在本实施例中,预设数据库中保存有一个或多个数据表,一个数据表包含多个列名,并且每个数据表的表名不同。在本实施例中,根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的SQL列名。例如,预设数据库中一个数据表的表名为A且该数据表的列名为name,sex和age,根据该数据表的列名和表名,得到A.name,A.sex和A.age这三个SQL列名;A.name,A.sex和A.age这三个SQL列名与该数据表的name,sex和age这三个列名一一对应,并且与表名A相对应。

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名之前,将预设数据库中的所有数据表对应的所有SQL列名输入预先构建的预设类型深度神经网络模型的嵌入层,输出各个SQL列名的词向量。所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:将所有目标分词的词向量和所有SQL列名的词向量作为输入数据分别输入到各个第一关键字对应的预设指针网络(即每个第一关键字对应的预设指针网络均收到所有目标分词的词向量和所有SQL列名的词向量,每个第一关键字对应的预设指针网络的输入相同),得到每个第一关键字对应的SQL列名。其中,一个所述第一关键字对应的SQL列名数量可以是一个或者多个,所述SQL列名的个数与所述占位符的个数相等。

需要指出的是,具有对应关系的所述第一子关键字和所述操作向量符对应于同一预设指针网络。

所述将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络之前,所述方法包括:将第一子关键字对应的操作向量符输入预先构建的预设类型深度神经网络模型,第一子关键字对应的操作向量符经过嵌入层,得到第一子关键字对应的操作向量符的词向量。将所述第一子关键字对应的操作向量符和每个所述目标分词作为输入数据分别输入到各个所述第一子关键字对应的预设指针网络,得到每个所述第一子关键字对应的计算完成的目标分词。例如,将一个第一子关键字对应的操作向量符的词向量和所有所述目标分词的词向量一同输入到同一个第一子关键字对应的预设指针网络,得到这个第一子关键字对应的计算完成的目标分词。

将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名,包括:

将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第一子关键字对应的预设指针网络,得到每个第一子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第一子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第一子关键字对应的SQL列名。

和/或将每个目标分词输入到每个第二子关键字对应的预设指针网络,得到第二子关键字对应的计算完成的目标分词;将所有计算完成的目标分词以及所有所述SQL列名作为输入数据分别输入各个第二子关键字对应的预设指针网络,得到每个第二子关键字对应的所有计算完成的目标分词与所有所述SQL列名的相似度,找出每个第二子关键字对应的预设指针网络对应的相似度最高的一个或多个SQL列名分别作为每个第二子关键字对应的SQL列名。

其中,可以用向量内积来计算所述计算完成的目标分词的词向量与SQL列名的词向量的相似度。计算出一个预设指针网络对应的每个所述计算完成的目标分词词向量与每个SQL列名词向量的相似度后,进一步利用softmax函数,可得到任意一个SQL列名与任意一个计算完成的目标分词所组成的组合对应的参数值,从而找出参数值最大的组合中的SQL列名,将该SQL列名作为这一预设指针网络对应的SQL列名。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”且SQL语句框架为“select col col from where col>”为例,预设数据库中所有数据库的所有列名对应的SQL列名包括A.age、A.name、A.sex等。将每个目标分词的词向量输入到select对应的预设指针网络,得到计算完成的每个目标分词词向量,计算所有计算完成的目标分词词向量与预设数据库中所有数据库的所有列名对应的SQL列名的词向量的相似度,SQL列名A.name的词向量与计算完成的目标分词name的词向量的相似度以及SQL列名A.sex的词向量与计算完成的目标分词sex的词向量的相似度高于其他列名的词向量与计算完成的目标分词的词向量的相似度,将SQL列名A.name和A.sex作为select对应的SQL列名。可以理解的是,select指针网络预测出的SQL列名的数量与前述的SQL语句中select对应的占位符数量相同,同理,其他第一关键字的指针网络预测出的SQL列名的数量与前述的SQL语句中同一关键字对应的占位符数量相同。

需要说明的是,由于不同第一关键字对应的指针网络的参数不同,导致将相同的目标分词的词向量输入不同第一关键字对应的指针网络后,得到计算完成的目标分词词向量是不同的,进而使得各个第一关键字对应的指针网络计算得到列名与目标分词的相似度也是不同的。

步骤S30:根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

本实施例中,根据所述每个SQL列名以及SQL列名与数据表表名的对应关系,从预设数据库中找出对应的一个或多个数据表。可以理解的是,得到的多个SQL列名可能关联于同一个数据表中(例如预测出的SQL列名为A.name,A.sex和A.age,这三个SQL列名均关联于数据表A),也可能每个SQL列名分别关联于不同的数据表中(例如预测出的SQL列名为A.name,B.sex和C.age,这三个SQL列名分别关联于A、B、C这三个数据表中)。

进一步地,所述根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名包括:

从预设数据库中搜索对应所有第一关键字对应的SQL列名的数据表;

若搜索到对应所有第一关键字对应的SQL列名的一个数据表,则确定搜索到的数据表即为目标数据表,该目标数据表的名称即为目标表名。

若未搜索到对应所有第一关键字对应的SQL列名的数据表,则分别根据各个所述第一关键字对应的SQL列名,分别从预设数据库中找出各个所述第一关键字对应的中间数据表,并将找出的各个中间数据表的名称按照预先确定的名称连接算法进行连接,得到目标表名。

具体地,当从预设数据库中找出一个数据表时,该数据表对应于所有的SQL列名,找出的所述数据表包含所有得到的所述列名,将该数据表作为目标数据表,提取该数据表的表名,将找出的数据表的表名作为目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的列名分别替换所述SQL语句框架中所有的占位符,得到SQL语句。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”,SQL语句框架为“select col col from where col>”,第一子关键字where对应的SQL列名为A.age,且第二子关键字select对应的SQL列名为A.name和A.sex为例,根据A.name,A.sex,A.age得到对应的列名name,sex和age,根据A.name,A.sex,A.age从预设数据库中找出表名为A的数据表,数据表A包含了name,sex和age,提取该数据表的表名A,将表名加入SQL语句框架中对应位置,将列名name,sex和age分别替换SQL语句框架中对应的col后,得到SQL语句为select name,sex from A where age>。

当未搜索到对应所有第一关键字对应的SQL列名的数据表(即未找到对应所有SQL列名的一个数据表)时,分别根据各个所述第一关键字对应的SQL列名,分别从预设数据库中找出各个所述第一关键字对应的中间数据表,中间数据表的数量为至少两个,通过join操作将找出的所有中间数据表进行连接,任意一个找出的所述数据表至少包含一个得到的所述列名且不包含所有得到的所述列名,所有中间数据表的列名的并集包含所有得到的数据表列名,提取所有找出的中间数据表的表名,将提取的多个所述表名通过join连接,得到目标表名,将目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的列名分别替换所述SQL语句框架中所有的占位符,得到SQL语句。需要说明的是,每个数据表均具有主键和外键,每个表的主键不同,通过一个表的主键与其他表的外键,可将表连接起来。例如,表A包括主键“姓名”和外键“年龄”,表B包括主键“年龄”和外键“性别”,表A的外键“年龄”和表B的主键“年龄”相同,因此可以将表A和表B连接起来。

以前述的查询语句为“show me the name,sex of students who are olderthan 18”,SQL语句框架为“select col col from where col>”为例,第一子关键字where对应的SQL列名为A.age,且第二子关键字select对应的SQL列名为B.name和C.sex。根据B.name,C.sex,A.age得到对应的列名name,sex和age,根据B.name,C.sex,A.age从预设数据库中找出表名为A、B和C的三个中间数据表,中间数据表B包含列名name,中间数据表C包含列名sex,中间数据表A包含列名age,提取该三个中间数据表的表名A、B和C,将中间数据表A、中间数据表B和中间数据表C的表名通过join连接,并加入SQL语句框架中对应位置,将列名name,sex和age分别替换SQL语句框架中对应的col后,得到SQL语句为select name,sex from A join B join C where age>。

本发明提出的数据库数据查询装置,接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。本方法能够支持用户按正常的语言方式输入查询语句使用限制较少,容错性较好。

此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括存储数据区和存储程序区,存储数据区存储根据区块链节点的使用所创建的数据,存储程序区存储有数据库数据查询程序10,所述数据库数据查询程序10被处理器执行时实现如下操作:

接收用户输入的查询语句,对接收的所述查询语句进行分词处理,得到一个或多个目标分词;将得到的所述目标分词输入预先构建的预设类型深度神经网络模型,以输出对应的SQL语句框架;所述SQL语句框架包括至少一个第一关键字、至少一个第二关键字和至少一个占位符;

根据预设数据库中每个数据表的列名以及与列名同属于一个数据表的表名,生成与预设数据库中所有数据表的所有列名一一对应的多个SQL列名;将所有所述目标分词以及所有所述SQL列名作为输入数据分别输入各个第一关键字对应的预设指针网络,分别得到每个所述第一关键字对应的SQL列名;

根据每个所述第一关键字对应的SQL列名,得到每个所述第一关键字对应的数据表列名,根据每个所述第一关键字对应的SQL列名从预设数据库中找出包含一个或多个所述数据表列名的数据表,根据找出的数据表确定出目标表名,将确定出的目标表名加入所述SQL语句框架中对应所述第二关键字的位置,将各个所述第一关键字对应的数据表列名分别替换所述SQL语句框架中对应的第一关键字的占位符,得到SQL语句。

需要强调的是,本发明之计算机可读存储介质的具体实施方式与上述数据库数据查询方法的具体实施方式大致相同,在此不再赘述。

在另一个实施例中,本发明所提供的数据库数据查询方法,为进一步保证上述所有出现的数据的私密和安全性,上述所有数据还可以存储于一区块链的节点中。例如知识图谱、待识别文本等等,这些数据均可存储在区块链节点中。

需要说明的是,本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

本发明之计算机可读存储介质的具体实施方式与上述数据库数据查询方法的具体实施方式大致相同,在此不再赘述。

需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,电子装置,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 数据库数据查询方法、装置、电子设备及存储介质
  • 跨数据库数据提取方法、装置、电子设备及存储介质
技术分类

06120112358212