CN115576984A - 中文自然语言生成sql语句及跨数据库查询方法 - Google Patents
中文自然语言生成sql语句及跨数据库查询方法 Download PDFInfo
- Publication number
- CN115576984A CN115576984A CN202211109934.XA CN202211109934A CN115576984A CN 115576984 A CN115576984 A CN 115576984A CN 202211109934 A CN202211109934 A CN 202211109934A CN 115576984 A CN115576984 A CN 115576984A
- Authority
- CN
- China
- Prior art keywords
- database
- field
- query
- alternative
- natural language
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/243—Natural language query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/237—Lexical tools
- G06F40/242—Dictionaries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/237—Lexical tools
- G06F40/247—Thesauruses; Synonyms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Probability & Statistics with Applications (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Fuzzy Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种中文自然语言生成SQL语句及跨数据库查询方法包括对自然语言语句进行预处理,获取短语片段并将短语片段划分成多个备选分段;若备选分段被符号包围,则将备选分段标记为值;然后,根据预设的词典,获取其余备选分段的同义词;将备选分段和同义词与预设的元数据数据库中的表注释、字段注释及标签元数据进行匹配,根据备选分段匹配到的表注释、字段注释或标签元数据,获取数据库名并将备选分段和同义词标记为表名、字段名或值,然后,生成一个新的字符串;通过对字符串编码解码,结合所述值,根据SQL语法规则生成SQL。本发明可以提高SQL语句在应用与对应的领域中进行深入查询时的准确性,减少出现查询结果与用户查询的真实意图不符的情况。
Description
技术领域
本发明涉及自然语言处理领域,特别是涉及中文自然语言生成SQL语句及跨数据库查询方法。
背景技术
随着大数据技术的发展,越来越多企业认识到了数据的重要性,并开始从数字化向数据化转型,企业对各种数据的查询需求呈现出多样性、分散性和一次性的特点,因此,数据部门往往会开放数据查询功能,提供给业务部门,由他们自助查询和分析数据。然而,商业智能由数据仓库查询工具虽然无需操作者了解复杂的结构化查询语言即SQL写法,但界面复杂,术语繁多,仍有较高的学***台租户的权限有必要进行精准、灵活、细粒度的控制,因此,提供一种高效、简洁且安全的用户-数据库辅助交互手段,将有利于数据分析师的效率提升。
对此,业界提出了名为Text-to-SQL的方案,即将自然语言转为对应的SQL语句查询,在数据库中查询并返回相应结果。通过Text-to-SQL作为数据库查询的接口,查询者可以无需了解SQL的写法,只用自然语言(文字或语音)和数据库进行交互,这就大大降低了数据查询的技术门槛,提高了效率。
然而现有的Text-to-SQL的模型设计时主要考虑到的是模型的泛化,同时由于中文语言的博大精深,从而使得现有的Text-to-SQL模型在需要应用于某一领域中时,需深入查询时,会出现查询正确召回率不理想,同时存在查询结果和用户查询的真实意图无法正确对齐的问题。
发明内容
基于此,本发明的目的在于,提供一种中文自然语言生成SQL语句及跨数据库查询方法和装置,其具有提高Text-to-SQL在应用与对应的领域中进行深入查询时的准确性,对查询语句结合元数据数据库分析,减少出现查询结果与用户查询的真实意图不符的情况。
一种中文自然语言生成SQL语句方法,包括以下步骤:
S101,对自然语言语句进行预处理,获取所述自然语言语句包含的短语片段;
S102,将所述短语片段划分成多个备选分段;
S103,判断所述备选分段在所述预处理前是否被符号包围,若所述备选分段被符号包围,则将所述备选分段标记为值;
S104,若所述备选分段不被符号包围,根据预设的词典,获取所述备选分段的同义词;
S105,将所述备选分段和所述同义词与预设的元数据数据库中的表注释、字段注释及标签元数据进行匹配,其中,所述元数据数据库中包含有多个数据库的表注释、字段注释及标签元数据;
S106,若所述备选分段和/或所述同义词匹配到所述表注释,将所述备选分段标记为表名;若所述备选分段和/或所述同义词匹配到所述字段注释,则将所述备选分段标记为字段名;若所述备选分段和/或所述同义词匹配到所述标签元数据,则将所述备选分段标记为值;根据所述备选分段和所述同义词匹配到的表注释、字段注释或标签元数据,获取对应的数据库的数据库名;
S107,将所述数据库名、表名和字段名以及自然语言语句形成一个新的字符串;
S108,将所述字符串编码,生成向量;
S109,将所述向量解码,根据SQL语法规则,结合所述值,生成SQL语句。
一种基于上述中文自然语言生成SQL语句的方法生成的SQL语句跨库查询的方法,包括以下步骤:
S301,使用调度单元,调整所述SQL语句;
S302,根据所述SQL语句包含的数据库名的个数,判断所述SQL语句是否只涉及到一个数据库,若所述SQL语句只涉及到一个数据库,则调度一个空闲的执行单元进行数据库查询,并将查询结果返回所述调度单元;
S303,若所述SQL语句涉及到多个数据库,则使用所述调度单元解析所述SQL语句,并编译生成优化执行计划,其中,所述优化执行计划是通过分析所述SQL语句,结合所述元数据数据库的内容进行处理获取的执行计划;
S304,根据所述优化执行计划,获取有向无环图,调度所述执行单元,执行各阶段的SQL语句查询,根据所述有向无环图,归并所述各阶段的SQL语句查询结果,生成最终查询结果,将最终查询结果及查询统计数据返回所述调度单元,其中所述查询统计数据是SQL语句查询过程中产生的数据的统计数据;
S305,将所述查询统计数据存储至所述调度单元,并输出所述最终查询结果。
一种可读存储介质,其特征在于:所述可读存储介质中存储有计算机程序,所述计算机程序被计算机执行后实现上述中文自然语言生成SQL语句的方法,上述SQL语句跨库查询的方法。
一种计算机设备,包括,上述所述的可读存储介质和处理器,所述处理器可执行所述可读存储介质中存储的计算机程序。
与现有技术相比,本发明提供的实施例至少具有以下有益效果:
本发明引入了数据内容更为丰富的元数据数据库,为自然语言生成SQL语句提供了更加完整的上下文信息,提高了自然语言生成SQL语句的准确性,同时使自然语言生成SQL语句在适用于特定领域时执行得到的查询结果更加准确,减少了出现查询结果与用户查询的真实意图不符的情况。另外,本发明中提出的跨数据库的SQL查询方法,使其可以针对任意多个数据库进行联合查询。
为了更好地理解和实施,下面结合附图详细说明本发明。
附图说明
图1为本申请实施例的中文自然语言生成SQL语句方法的步骤流程图;
图2为本申请实施例中元数据数据库配置的步骤流程图;
图3为本申请实施例中SQL语句跨库查询方法的步骤流程图;
图4为本申请实施例中解析SQL语句生成优化执行计划的步骤流程图。
具体实施方式
请参阅图1,图1为本申请实施例的中文自然语言生成SQL语句方法的步骤流程图。
一种中文自然语言生成SQL语句方法,包括以下步骤:
S101,对自然语言语句进行预处理,获取所述自然语言语句包含的短语片段;
S102,将所述短语片段划分成多个备选分段;
S103,判断所述备选分段在所述预处理前是否被符号包围,若所述备选分段被符号包围,则将所述备选分段标记为值;
S104,若所述备选分段不被符号包围,根据预设的词典,获取所述备选分段的同义词;
S105,将所述备选分段和所述同义词与预设的元数据数据库中的表注释、字段注释及标签元数据进行匹配,其中,所述元数据数据库中包含有多个数据库的表注释、字段注释及标签元数据;
S106,若所述备选分段和/或所述同义词匹配到所述表注释,将所述备选分段标记为表名;若所述备选分段和/或所述同义词匹配到所述字段注释,则将所述备选分段标记为字段名;若所述备选分段和/或所述同义词匹配到所述标签元数据,则将所述备选分段标记为值;根据所述备选分段和所述同义词匹配到的表注释、字段注释或标签元数据,获取对应的数据库的数据库名;
S107,将所述数据库名、表名和字段名以及自然语言语句形成一个新的字符串;
S108,将所述字符串编码,生成向量;
S109,将所述向量解码,根据SQL语法规则,结合所述值,生成SQL语句;
对于步骤S101,对自然语言语句进行预处理,获取所述自然语言语句包含的短语片段;
其中,所述自然语言语句是用户输入的用于查询的自然语句,所述自然语言语句可以是问句,也可以是其他语句,在本申请中所述自然语言语句主要是中文,例如,所述自然语言语句可以是“在XX年,XX产品在X季度的销售额为多少?”。
所述预处理是去除所述自然语言语句中的标点符号,将所述自然语言语句根据所述标点符号划分成多个片段,所述短语片段是所述自然语言语句经过预处理后获取的片段。例如,对所述自然语言语句“在XX年,XX产品在X季度的销售额为多少?”进行预处理后获取的短语片段为“在XX年”以及“XX产品在X季度的销售额为多少”。
对于步骤S102,将所述短语片段划分成多个备选分段;
将所述短语片段划分成多个备选分段,是将所述短语片段进行从1到某个值的不同长度的滑动窗口切割,划分成多个分段,所述备选分段是所述短语片段经过滑动窗口切割获取的分段。例如,对于所述短语片段“在XX年”以及“XX产品在X季度的销售额为多少”,在经过所述划分操作后,获取所述备选分段可以是“在、X、X、年···多、少、在X、XX、X年···多少、在XX、XX年···为多少···”等。
对于步骤S103,判断所述备选分段在所述预处理前是否被符号包围,若所述备选分段被符号包围,则将所述备选分段标记为值;
其中,所述符号包括单引号、双引号、书名号;所述“值”是元数据数据库的表的字段中对应的具体内容。通过判断所述备选分段在进行所述预处理前是否被符号包围,识别出具有特殊含义或是专有名词的备选分段,将所述具有特殊意义或是专有名词的备选分段,直接标记为“值”。
对于步骤S104,若所述备选分段不被符号包围,根据预设的词典,获取所述备选分段的同义词;
其中,所述预设的词典是提前配置好的用于分词的词汇表,包括专有名词、同义词等。所述同义词是对同一含义的名词的多种不同形式的表述的词。对于不被所述符号包围的所述备选分段,从所述预设的词典中,查询找到所述备选分段对应的同义词。
对于步骤S105,将所述备选分段和所述同义词与预设的元数据数据库中的表注释、字段注释及标签元数据进行匹配,其中所述元数据数据库中包含有多个数据库的表注释、字段注释及标签元数据;
其中,所述预设的元数据数据库是提前设置的元数据数据库。所述元数据数据库是存储有元数据的数据库,进一步地,所述元数据数据库中存储的元数据包括多个数据库的表注释、字段注释以及标签元数据,所述表注释是对所述数据库的表的名称的注释,所述字段注释是对所述数据库的表中的字段的名称的注释,所述标签元数据是对所述数据库中的表中的字段中具有的具体内容。将所述备选分段和所述同义词与所述元数据数据库中的表注释、字段注释和标签元数据进行匹配,所述匹配包括完全匹配和部分匹配,识别出所述备选分段和所述同义词对应的表名、字段名或值。
对于步骤S106,若所述备选分段和/或所述同义词匹配到所述表注释,将所述备选分段标记为表名;若所述备选分段和/或所述同义词匹配到所述字段注释,则将所述备选分段标记为字段名;若所述备选分段和/或所述同义词匹配到所述标签元数据,则将所述备选分段标记为值;根据所述备选分段和所述同义词匹配到的表注释、字段注释或标签元数据,获取对应的数据库的数据库名;
其中,所述表名是所述数据库中的表的名称,所述字段名是所述数据库中的表中的字段的名称,所述数据库名是数据库的名称,所述对应的数据是所述表注释、字段注释或标签元数据所在的数据库。
如果所述备选分段和/或所述同义词匹配到所述表注释,,将所述备选分段标记为所述表注释对应的表名,从而将所述备选分段和所述表注释关联。
如果所述备选分段和/或所述同义词匹配到所述字段注释,则将所述备选分段标记为所述字段注释对应的字段名,从而将所述备选分段和所述字段注释关联。
如果所述备选分段和/或所述同义词匹配到所述标签元数据,则将所述备选分段标记为值,同时,对于可以确定唯一字段的值,链接所述值与所述标签元数据关联的字段与表。
最后,根据所述备选分段和所述同义词匹配到的所述表注释、字段注释或标签元数据,获取所述表注释、字段注释或标签元数据所在的数据库的数据库名,从而获取所述备选分段所在的数据库的数据库名。
对于匹配到所述表注释、字段注释或标签元数据的所述备选分段,将移除与所述备选分段在所述步骤S102中进行所述滑动窗口切割中产生交集的备选分段。
对于步骤S107,将所述数据库名、表名和字段名以及自然语言语句形成一个新的字符串;
其中,所述字符串是是由数字、字母、下划线组成的一串字符。在本申请中,所述字符串是由所述数据库名、表名和字段名以及自然语言语句形成的。
在一个实施例中,所述字符串的形成过程为:
在所述自然语言语句前面增加句首;
添加表标识,添加完整表名,所述完整表名包括所述数据库名和所述表名;
添加字段标识,添加字段名。
所述句首是编程中用于识别自然语言语句开始的一个标识,所述表标识是编程中用于识别表开始的一个标识,所述字段标识是编程中用于识别字段开始的一个标识。
在一个实施例中,假设有自然语言语句Q。
将所述自然语言语句,数据库名,表名,字段名按下面的规则拼成一个字符串X:
添加句首token[CLS];添加自然语言语句Q;添加分隔符token[SEP];添加表token[T];添加完整表名,其中所述完整表名包括数据库名和表名,所述完整表名的形式为数据库名+英文句号(.)+表名;添加字段token[C];添加所述字段名;添加分隔符token[SEP]。
对于步骤S108,将所述字符串编码,生成向量;
所述编码是信息从一种形式或格式转换为另一种形式的过程,通过对所述字符串进行编码,从而获取向量。
在一个实施例中,所述编码步骤为:
用微调参数的语言理解模型对所述字符串X和所述自然语言语句Q进行编码,获得隐藏层输出HX和HQ;
将所述HX和HQ输入双向长短期记忆网络,获得编码hX和hQ;
计算表编码向量 其中,所述D表示数据库集合,所述Di是第i个数据库,所述Δ是数据库集合中一共有Δ个数据库,所述是第i个数据库中的第v张表,所述T是第i个数据库中一共有T张表,所述是表在所述字符串X中的索引,所述是hX中对应索引的表的编码向量,所述是和零向量[0 0 0]组成的增广矩阵,f(·)是一个前馈层网络函数;
计算字段编码向量其中,所述表示第i个数据库中的第v张表中的第j个字段,所述Γ是第i个数据库中的第v张表中一共有Γ个字段,所述是所述字符串X中字段的索引,是hX中对应索引的字段的编码向量,所述Ft、Ff和Fp是从所述元数据数据库中获取的特征向量;
根据所述表编码向量和所述字段编码向量,形成表编码向量增广矩阵:
计算所述表编码向量增广矩阵,形成数据库编码向量:
计算所述数据编码向量,形成数据库集合编码向量:
计算完整的编码向量:he=[hQ hD]。
对于步骤S109,将所述向量解码,根据SQL语法规则,结合所述值,生成SQL语句;
所述解码是通过对所述编码生成的所述向量进行运算的过程,将所述解码得到的结果,根据SQL语法规则,结合所述值,生成SQL语句。
在一个实施例中,将所述向量解码,生成所述SQL语句包括以下步骤:
获取解码器神经网络的第x个时间步,其隐藏层状态sx,其中s1=he,第h(h∈[1,2,…,H])个注意力头;
计算从所述词典V中选取词汇v的概率分布:
按SQL语法规则,结合所述值,组装SQL。
在一个实施例中,请参阅图2,图2为本申请实施例中元数据数据库配置的步骤流程图,所述元数据数据库的更新包括以下步骤:
S201,遍历预设的全部数据库;
S202,判断所述数据库的数据库表结构是否发生变化,若所述数据库表结构发生变化,通过爬虫获取所述数据库的表名、表注释、字段名和字段注释;
S203,采集所述数据库的内容生成内容样本,按列去重为集合,放入样本数据库;
S204,遍历所述数据库的源代码仓库,判断所述源代码仓库是否发布新版本;
S205,若所述源代码仓库发布新版本,则通过爬虫获取所述源代码仓库的源代码,同时使用语法解析器解析源代码获取所述源代码仓库的表名、表注释、字段名、字段注释、字段类型和字段标签;
S206,将所述数据库的表名和字段名与所述源代码仓库的表名和字段名进行关联合并,清洗所述数据库的表注释和字段注释以及所述源代码仓库的表注释、字段注释、字段类型和字段标签,并保存至元数据数据库。
对于步骤S201,遍历预设的全部数据库;
其中所述数据库是是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。所述预设的全部数据库是提前设置好的多个数据库,在一个实施例中,所述预设的全部数据库是提前设置好的多个贸易服务领域的数据库。通过遍历预设的全部数据库,从而检测到每一个数据库的状态。
对于步骤S202,判断所述数据库的数据库表结构是否发生变化,若所述数据库表结构发生变化,通过爬虫获取所述数据库的表名、表注释、字段名和字段注释;
其中,所述爬虫是网络爬虫,是指一种按照一定的规则,自动地抓取信息的程序或者脚本。所述数据库表结构是所述数据库中的表格信息,如果检测到所述数据库的数据库表结构发生变化,则可以通过所述爬虫从所述数据库中爬取所述数据库的表名、表注释、字段名以及字段注释信息。
对于步骤S203,采集所述数据库的内容生成内容样本,按列去重为集合,放入样本数据库;
其中所述内容样本包括表数据或部分表数据、所有列数据或部分列数据。通过爬虫采集所述数据库的内容样本,同时将所述内容样本按列去重形成集合,最终落入样本数据库中。所述样本数据库用于对未匹配到表注释、字段注释或标签元数据的备选分段进行进一步匹配。
对于步骤S204,遍历所述数据库的源代码仓库,判断所述源代码仓库是否发布新版本;
所述源代码仓库是指用于存储未编译的按照一定的程序设计语言规范书写的文本文件,一系列人类可读的计算机语言指令的数据仓库。通过遍历所有的源代码仓库,判断每一个源代码仓库是否发布新版本,即判定所述源代码仓库信息是否发生变化。
对于步骤S205,若所述源代码仓库发布新版本,则通过爬虫获取所述源代码仓库的源代码,同时使用语法解析器解析源代码获取所述源代码仓库的表名、表注释、字段名、字段注释、字段类型和字段标签;
其中,所述语法解析是通过算法设计实现可以识别并解析所述源代码的功能。对于发布新版本的源代码仓库,首先通过所述爬虫爬取所述源代码仓库中的源代码,然后使用所述语法解析器对所述源代码进行解析,获取所述源代码中的数据库表实体类,并从中取出所述源代码仓库中的表名、表注释、字段名、字段注释、字段类型和字段标签信息。
对于步骤S206,将所述数据库的表名和字段名与所述源代码仓库的表名和字段名进行关联合并,清洗所述数据库的表注释和字段注释以及所述源代码仓库的表注释、字段注释、字段类型和字段标签,并保存至元数据数据库。
对于获取的所述数据库中的表名、表注释、字段名以及字段注释信息以及所述源代码仓库中的表名、表注释、字段名、字段注释、字段类型和字段标签信息,根据所述数据库中的表名和字段名以及所述源代码仓库中的表名和字段名,进行关联合并,并对所述数据库的表注释和字段注释以及所述源代码仓库的表注释、字段注释、字段类型和字段标签进行清洗处理,即获取更准确更详细的表注释、字段注释、字段类型和字段标签信息,最终将得到的数据保存至元数据数据库中。
在一个实施例中,在完成步骤S206后,进一步还包括以下步骤:
通知管理员对保存至元数据数据库中的数据进行审核,对保存至所述元数据数据库中的数据进一步完善,最后作为正式的元数据,保存至元数据数据库中。
在一个实施例中,执行完步骤S106后,还包括以下步骤:
若所述备选分段和/或所述同义词未匹配到所述表注释、字段注释或标签元数据,则将所述备选分段和/或同义词在所述元数据数据库中的样本数据库中,结合所述自然语言语句中距离所述备选分段最近的备选分段匹配到的表名,对所述备选分段进行模糊匹配,若所述备选分段匹配到字段,则将所述备选分段标记为值;
在一个实施例中,如果所述备选分段和/或所述同义词未匹配到所述表注释、字段注释或标签元数据,则将所述备选分段和/或所述同义词在所述元数据数据库中的样本数据库中,结合所述自然语言语句中距离所述备选分段最近的备选分段匹配到的表名,对所述备选分段进行模糊匹配,所述模糊匹配是根据所述表名获取所述表中的所有类型为字符串的字段数据,按照余弦相似度降序排列,如果相似度超过预设的阈值的字段只有一个,则所述备选分段匹配到所述字段,并将所述备选分段标记为值。
在一个实施例中,请参阅图3,图3为本申请实施例中SQL语句跨库查询方法的步骤流程图,一种基于上述实施例所述的自然语言生成SQL语句的方法生成的SQL语句跨库查询方法,包括以下步骤:
S301,使用调度单元,调整所述SQL语句;
S302,根据所述SQL语句包含的数据库名的个数,判断所述SQL语句是否只涉及到一个数据库,若所述SQL语句只涉及到一个数据库,则调度一个空闲的执行单元进行数据库查询,并将查询结果返回所述调度单元;
S303,若所述SQL语句涉及到多个数据库,则使用所述调度单元解析所述SQL语句,并编译生成优化执行计划,其中,所述优化执行计划是通过分析所述SQL语句,结合所述元数据数据库的内容进行处理获取的执行计划;
S304,根据所述优化执行计划,获取有向无环图,调度所述执行单元,执行各阶段的SQL语句查询,根据所述有向无环图,归并所述各阶段的SQL语句查询结果,生成最终查询结果,将最终查询结果及查询统计数据返回所述调度单元,其中所述查询统计数据是SQL语句查询过程中产生的数据的统计数据;
S305,将所述查询统计数据存储至所述调度单元,并输出所述最终查询结果。
对于步骤S301,使用调度单元,调整所述SQL语句;
其中,所述调度单元可以解析SQL语句以及调用其他功能,所述SQL语句是基于上述实施例所述的中文自然语言生成SQL语句的方法所生成的SQL语句。在生成SQL语句后,开始执行SQL语句查询时,首先通过所述调度单元对所述SQL语句做出调整。
所述调整包括根据用户的权限配置和表配置,附加必须的过滤条件,例如,对租户等内容附加过滤条件;检测SQL语句中的表和字段,隐藏敏感信息,例如:如果检测到字段中包含敏感信息,则对所述包含敏感信息的字段进行掩码或者隐藏。
对于步骤S302,根据所述SQL语句包含的数据库名的个数,判断所述SQL语句是否只涉及到一个数据库,若所述SQL语句只涉及到一个数据库,则调度一个空闲的执行单元进行数据库查询,并将查询结果返回所述调度单元;
其中,所述执行单元是用于执行SQL查询。在进行SQL语句查询前首先需要根据所述SQL语句中的数据库名的个数,进行判断所述SQL语句查询是针对一个数据库还是多个数据。如果所述SQL语句中的数据库名只有一个,则表示所述SQL语句查询是针对一个数据库进行查询,否则所述SQL语句查询则涉及到多个数据库。针对只涉及一个数据库的SQL语句查询,则通过所述调度单元调度一个所述执行单元,对所述SQL语句进行查询,当查询结束后,所述执行单元将查询结果输出至所述调度单元。
对于步骤S303,若所述SQL语句涉及到多个数据库,则使用所述调度单元解析所述SQL语句,并编译生成优化执行计划,其中,所述优化执行计划是通过分析所述SQL语句,结合所述元数据数据库的内容进行处理获取的执行计划;
其中,所述优化执行计划是通过分析所述SQL语句,结合所述元数据数据库的内容进行处理获取的执行计划。
在一个实施例中,请参阅图4,图4为本申请实施例中解析SQL语句生成优化执行计划的步骤流程图,所述编译生成优化执行计划,包括以下步骤:
S401,对所述SQL语句进行词法分析,生成语法树;
S402,根据所述语法树,构建解析的执行计划;
S403,将所述解析的执行计划结合所述元数据数据库中的信息,生成已分析的执行计划;
S404,优化所述已分析的执行计划,生成次优执行计划;
S405,根据次优执行计划,依据代价模型,计算查询代价,获取查询代价最小的执行计划,生成优化执行计划;
S406,根据所述优化执行计划涉及到的数据库,生成一张SQL执行计划的所述有向无环图。
对于步骤S401,对所述SQL语句进行词法分析,生成语法树;
所述词法分析是计算机科学中将字符序列转换为单词序列的过程。所述语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次。通过对所述SQL进行所述词法分析,从而生成所述语法树。
对于步骤S402,根据所述语法树,构建解析的执行计划;
其中,所述解析的执行计划包括数据库、表、字段、值、聚合操作、过滤、分组等信息。所述构建解析的执行计划是根据所述语法树获取的所述解析的执行计划。
对于步骤S403,将所述解析的执行计划结合所述元数据数据库中的信息,生成已分析的执行计划;
所述解析的执行计划是根据所述语法树获取的,所以所述解析的执行计划中不包括任何数据库的信息。所以,通过对所述解析的执行计划中附加所述元数据数据库中的信息,例如所述表名,字段名等,从而生成所述已分析的执行计划。
对于步骤S404,优化所述已分析的执行计划,生成次优执行计划;
通过对所述已分析的执行计划,设置一组优化规则,递归地对SQL进行启发式优化,最终生成次优执行计划。
在一个实施例中,所述优化规则包括以下步骤:
谓词下推,即把过滤条件往下推到距数据源更近的地方,减少表扫描量,例如,将JOIN之后执行的过滤算子,移动到JOIN之前;
字段裁剪,即移除不需要的查询字段,减少网络传输量,从而加速查询效率;
常量替换,即计算常量表达式,进行执行前的类型转换,减少大数据量时执行引擎的计算量;
基于小型表的常量展开,即如果查询的表涉及到了在“数据库管理”中配置的小型表,则按执行计划对这些表进行子查询,将结果作为常量展开到执行计划中;
自定义规则,即通过Java类的形式扩展并装载到***中执行,结合业务特性,实现个性化的优化。
对于步骤S405,根据次优执行计划,依据代价模型,计算查询代价,获取查询代价最小的执行计划,生成优化执行计划;
所述代价模型是对所述次优执行计划进行代价估算所建立的模型。对于所述次优执行计划,依据所述代价模型,通过对计算每个算子的CPU运算和网络传输的代价。进行进一步的调整,从而获得优化执行计划。
在一个实施例中,生成优化执行计划,包括以下步骤:
依次交换JOIN语句前后的跨库的表,从次优执行计划中派生出一组等效的执行计划;
取出参与关联查询的表,根据历史查询统计数据、数据库元数据爬虫采集到的表的记录数、每个执行单元的执行开销、函数的执行代价,按一定权重,估算单表查询的代价。
遍历每一个执行计划,计算每个执行计划的整体查询代价;
选取查询代价最小的执行计划,作为优化执行计划。
对于步骤S406,根据所述优化执行计划涉及到的数据库,生成一张SQL执行计划的所述有向无环图。
所述有向无环图指的是一个无回路的有向图。所述有向无环图是根据所述优化执行计划涉及到的数据库,将查询拆分为多个不同的阶段和任务,根据每个任务的依赖关系而生成的。
对于涉及到多个数据库的SQL语句,在执行查询前,首先通过所述调度单元进行解析,然后根据上述实施例所述的步骤生成优化执行计划。
对于步骤S304,根据所述优化执行计划,获取有向无环图,调度所述执行单元,执行各阶段的SQL语句查询,根据所述有向无环图,归并所述各阶段的SQL语句查询结果,生成最终查询结果,将最终查询结果及查询统计数据返回所述调度单元,其中所述查询统计数据是SQL语句查询过程中产生的数据的统计数据;
其中所述查询统计数据是所述SQL语句跨库查询过程中获取到的查询数据。根据所述优化执行计划,通过所述调度单元调度所述执行单元开始执行所述SQL语句跨库查询的各阶段查询获取查询结果,对于所述查询结果,根据所述有向无环图中的每个任务的依赖关系,进行归并处理,从而获取所述最终查询结果。所述执行单元最后将所述最终查询结果和所述查询统计数据返回至所述调度单元。
对于步骤S305,将查询统计数据存储至所述调度单元,并输出所述最终查询结果;
所述查询统计数据存储至所述调度单元可用于下次SQL语句跨库查询的代价计算。同时,所述调度单元获取所述执行单元返回的所述最终查询结果,然后输出所述最终查询结果。
在一个实施例中,所述中文自然语言的SQL语句跨数据库查询方法,还包括以下步骤:
配置用户的权限信息,记录每一次查询的SQL和查询结果。
通过所述配置用户的权限信息,可以提供数据级的租户控制和字段级的权限控制。通过记录每一查询的SQL和查询结果可以用于审计。
本申请还提供了一种中文自然语言的SQL语句生成及跨数据库查询装置,包括可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序被所述计算机执行时,可以实现上述实施例中所述中文自然语言生成SQL语句的方法和/或SQL语句跨库查询的方法。
本申请还提供了一种计算机设备,包括,上述实施例所述的可读存储介质和处理器,所述处理器可执行所述可读存储介质中存储的计算机程序。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (10)
1.一种中文自然语言生成SQL语句方法,其特征在于:包括以下步骤:
S101,对自然语言语句进行预处理,获取所述自然语言语句包含的短语片段;
S102,将所述短语片段划分成多个备选分段;
S103,判断所述备选分段在所述预处理前是否被符号包围,若所述备选分段被符号包围,则将所述备选分段标记为值;
S104,若所述备选分段不被符号包围,根据预设的词典,获取所述备选分段的同义词;
S105,将所述备选分段和所述同义词与预设的元数据数据库中的表注释、字段注释及标签元数据进行匹配,其中,所述元数据数据库中包含有多个数据库的表注释、字段注释及标签元数据;
S106,若所述备选分段和/或所述同义词匹配到所述表注释,将所述备选分段标记为表名;若所述备选分段和/或所述同义词匹配到所述字段注释,则将所述备选分段标记为字段名;若所述备选分段和/或所述同义词匹配到所述标签元数据,则将所述备选分段标记为值;根据所述备选分段和所述同义词匹配到的表注释、字段注释或标签元数据,获取对应的数据库的数据库名;
S107,将所述数据库名、表名和字段名以及自然语言语句形成一个新的字符串;
S108,将所述字符串编码,生成向量;
S109,将所述向量解码,根据SQL语法规则,结合所述值,生成SQL语句。
2.根据权利要求1所述的中文自然语言生成SQL语句方法,其特征在于:所述元数据数据库的获取包括以下步骤:
S201,遍历预设的全部数据库;
S202,判断所述数据库的数据库表结构是否发生变化,若所述数据库表结构发生变化,通过爬虫获取所述数据库的表名、表注释、字段名和字段注释;
S203,采集所述数据库的内容生成内容样本,按列去重为集合,放入样本数据库;
S204,遍历所述数据库的源代码仓库,判断所述源代码仓库是否发布新版本;
S205,若所述源代码仓库发布新版本,则通过爬虫获取所述源代码仓库的源代码,同时使用语法解析器解析源代码获取所述源代码仓库的表名、表注释、字段名、字段注释、字段类型和字段标签;
S206,将所述数据库的表名和字段名与所述源代码仓库的表名和字段名进行关联合并,清洗所述数据库的表注释和字段注释以及所述源代码仓库的表注释、字段注释、字段类型和字段标签,并保存至元数据数据库。
3.根据权利要求1所述的中文自然语言生成SQL语句方法,其特征在于:还包括以下步骤:
若所述备选分段和/或所述同义词未匹配到所述表注释、字段注释或标签元数据,则将所述备选分段和/或同义词在所述元数据数据库中的样本数据库中,结合所述自然语言语句中距离所述备选分段最近的备选分段匹配到的表名,对所述备选分段进行模糊匹配,若所述备选分段匹配到字段,则将所述备选分段标记为值。
4.根据权利要求1所述的中文自然语言生成SQL语句方法,其特征在于:所述将所述数据库名、表名和字段名以及自然语言语句形成一个新的字符串包括以下步骤:
在所述自然语言语句前面增加句首;
添加表标识,添加完整表名,所述完整表名包括所述数据库名和所述表名;
添加字段标识,添加字段名。
5.根据权利要求1所述的中文自然语言生成SQL语句方法,其特征在于:所述编码包括以下步骤:
用微调参数的语言理解模型对所述字符串X和所述自然语言语句Q进行编码,获得隐藏层输出HX和HQ;
将所述HX和HQ输入双向长短期记忆网络,获得编码hX和hQ;
计算表编码向量 其中,所述D表示数据库集合,所述Di是第i个数据库,所述Δ是数据库集合中一共有Δ个数据库,所述是第i个数据库中的第v张表,所述T是第i个数据库中一共有T张表,所述是表在所述字符串X中的索引,所述是hX中对应索引的表的编码向量,所述是和零向量[0 0 0]组成的增广矩阵,f(·)是一个前馈层网络函数;
计算字段编码向量其中,所述表示第i个数据库中的第v张表中的第j个字段,所述Γ是第i个数据库中的第v张表中一共有Γ个字段,所述是所述字符串X中字段的索引,是hX中对应索引的字段的编码向量,所述Ft、Ff和Fp是从所述元数据数据库中获取的特征向量;
根据所述表编码向量和所述字段编码向量,形成表编码向量增广矩阵:
计算所述表编码向量增广矩阵,形成数据库编码向量:
计算所述数据编码向量,形成数据库集合编码向量:
计算完整的编码向量:he=[hQ hD]。
6.根据权利要求5所述的中文自然语言生成SQL语句方法,其特征在于:所述解码包括以下步骤:
获取解码器神经网络的第x个时间步,其隐藏层状态sx,其中s1=he,第h(h∈[1,2,…,H])个注意力头;
计算从所述词典V中选取词汇v的概率分布:
按SQL语法规则,结合所述值,组装SQL。
7.一种基于权利要求1-6任意一项所述的中文自然语言生成SQL语句的方法生成的SQL语句跨库查询的方法,其特征在于:包括以下步骤:
S301,使用调度单元,调整所述SQL语句;
S302,根据所述SQL语句包含的数据库名的个数,判断所述SQL语句是否只涉及到一个数据库,若所述SQL语句只涉及到一个数据库,则调度一个空闲的执行单元进行数据库查询,并将查询结果返回所述调度单元;
S303,若所述SQL语句涉及到多个数据库,则使用所述调度单元解析所述SQL语句,并编译生成优化执行计划,其中,所述优化执行计划是通过分析所述SQL语句,结合所述元数据数据库的内容进行处理获取的执行计划;
S304,根据所述优化执行计划,获取有向无环图,调度所述执行单元,执行各阶段的SQL语句查询,根据所述有向无环图,归并所述各阶段的SQL语句查询结果,生成最终查询结果,将最终查询结果及查询统计数据返回所述调度单元,其中所述查询统计数据是SQL语句查询过程中产生的数据的统计数据;
S305,将所述查询统计数据存储至所述调度单元,并输出所述最终查询结果。
8.根据权利要求7所述的SQL语句跨库查询的方法,其特征在于:所述编译生成优化执行计划,包括以下步骤:
S401,对所述SQL语句进行词法分析,生成语法树;
S402,根据所述语法树,构建解析的执行计划;
S403,将所述解析的执行计划结合所述元数据数据库中的信息,生成已分析的执行计划;
S404,优化所述已分析的执行计划,生成次优执行计划;
S405,根据次优执行计划,依据代价模型,计算查询代价,获取查询代价最小的执行计划,生成优化执行计划;
S406,根据所述优化执行计划涉及到的数据库,生成一张SQL执行计划的所述有向无环图。
9.一种可读存储介质,其特征在于:所述可读存储介质中存储有计算机程序,所述计算机程序被计算机执行后实现权利要求1-6任一项所述的中文自然语言生成SQL语句的方法和/或权利要求7-8任一项所述的SQL语句跨库查询的方法。
10.一种计算机设备,其特征在于:包括,权利要求9所述的可读存储介质和处理器,所述处理器可执行所述可读存储介质中存储的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211109934.XA CN115576984A (zh) | 2022-09-13 | 2022-09-13 | 中文自然语言生成sql语句及跨数据库查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211109934.XA CN115576984A (zh) | 2022-09-13 | 2022-09-13 | 中文自然语言生成sql语句及跨数据库查询方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115576984A true CN115576984A (zh) | 2023-01-06 |
Family
ID=84581954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211109934.XA Pending CN115576984A (zh) | 2022-09-13 | 2022-09-13 | 中文自然语言生成sql语句及跨数据库查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115576984A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878659A (zh) * | 2023-02-01 | 2023-03-31 | 云账户技术(天津)有限公司 | 一种生成sql语句的方法、装置、设备及可读存储介质 |
CN116010445A (zh) * | 2023-03-28 | 2023-04-25 | 恒生电子股份有限公司 | 数据库sql脚本的处理方法及装置 |
CN116501758A (zh) * | 2023-06-28 | 2023-07-28 | 四创科技有限公司 | 一种NetCDF数据的查询方法及终端 |
CN116701437A (zh) * | 2023-08-07 | 2023-09-05 | 上海爱可生信息技术股份有限公司 | 数据转化方法、数据转化***、电子设备及可读存储介质 |
CN116756175A (zh) * | 2023-07-06 | 2023-09-15 | 上海爱湃斯科技有限公司 | 一种基于sql语言的mongodb数据更新方法 |
CN117235108A (zh) * | 2023-11-14 | 2023-12-15 | 云筑信息科技(成都)有限公司 | 一种基于图神经网络的nl2sql生成方法 |
CN117371406A (zh) * | 2023-10-07 | 2024-01-09 | 星环信息科技(上海)股份有限公司 | 基于大型语言模型的注释生成方法、装置、设备及介质 |
CN117667978A (zh) * | 2023-12-07 | 2024-03-08 | 上海迈伺通健康科技有限公司 | 一种使用中文指令操作数据库的计算机*** |
-
2022
- 2022-09-13 CN CN202211109934.XA patent/CN115576984A/zh active Pending
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878659A (zh) * | 2023-02-01 | 2023-03-31 | 云账户技术(天津)有限公司 | 一种生成sql语句的方法、装置、设备及可读存储介质 |
CN116010445A (zh) * | 2023-03-28 | 2023-04-25 | 恒生电子股份有限公司 | 数据库sql脚本的处理方法及装置 |
CN116010445B (zh) * | 2023-03-28 | 2023-07-25 | 恒生电子股份有限公司 | 数据库sql脚本的处理方法及装置 |
CN116501758A (zh) * | 2023-06-28 | 2023-07-28 | 四创科技有限公司 | 一种NetCDF数据的查询方法及终端 |
CN116501758B (zh) * | 2023-06-28 | 2023-08-25 | 四创科技有限公司 | 一种NetCDF数据的查询方法及终端 |
CN116756175A (zh) * | 2023-07-06 | 2023-09-15 | 上海爱湃斯科技有限公司 | 一种基于sql语言的mongodb数据更新方法 |
CN116701437A (zh) * | 2023-08-07 | 2023-09-05 | 上海爱可生信息技术股份有限公司 | 数据转化方法、数据转化***、电子设备及可读存储介质 |
CN116701437B (zh) * | 2023-08-07 | 2023-10-20 | 上海爱可生信息技术股份有限公司 | 数据转化方法、数据转化***、电子设备及可读存储介质 |
CN117371406A (zh) * | 2023-10-07 | 2024-01-09 | 星环信息科技(上海)股份有限公司 | 基于大型语言模型的注释生成方法、装置、设备及介质 |
CN117235108A (zh) * | 2023-11-14 | 2023-12-15 | 云筑信息科技(成都)有限公司 | 一种基于图神经网络的nl2sql生成方法 |
CN117667978A (zh) * | 2023-12-07 | 2024-03-08 | 上海迈伺通健康科技有限公司 | 一种使用中文指令操作数据库的计算机*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115576984A (zh) | 中文自然语言生成sql语句及跨数据库查询方法 | |
US11989519B2 (en) | Applied artificial intelligence technology for using natural language processing and concept expression templates to train a natural language generation system | |
CN110399457B (zh) | 一种智能问答方法和*** | |
CN106649260B (zh) | 基于评论文本挖掘的产品特征结构树构建方法 | |
CN104657439B (zh) | 用于自然语言精准检索的结构化查询语句生成***及方法 | |
CN104657440B (zh) | 结构化查询语句生成***及方法 | |
US7627567B2 (en) | Segmentation of strings into structured records | |
CN113609838B (zh) | 文档信息抽取及图谱化方法和*** | |
CN112445894A (zh) | 基于人工智能的商务智能***及其分析方法 | |
CN111553160A (zh) | 一种获取法律领域问句答案的方法和*** | |
CN114625748A (zh) | Sql查询语句的生成方法、装置、电子设备及可读存储介质 | |
Tapsai | Information processing and retrieval from CSV file by natural language | |
CN111898024A (zh) | 一种智能问答方法、装置、可读存储介质及计算设备 | |
CN111831624A (zh) | 数据表创建方法、装置、计算机设备及存储介质 | |
Francia et al. | Towards conversational OLAP | |
Sun | A natural language interface for querying graph databases | |
Talburt et al. | A practical guide to entity resolution with OYSTER | |
JP4005343B2 (ja) | 情報検索システム | |
CN113032366A (zh) | 基于Flex和Bison的SQL语法树解析方法 | |
CN112183110A (zh) | 一种基于数据中心的人工智能数据应用***及应用方法 | |
CN114391142A (zh) | 使用结构化和非结构化数据的解析查询 | |
Martin et al. | Incremental evolution of fuzzy grammar fragments to enhance instance matching and text mining | |
CN114417008A (zh) | 一种面向建设工程领域的知识图谱构建方法及*** | |
CN114528459A (zh) | 一种基于语义的网页信息抽取方法及*** | |
CN111897932A (zh) | 一种文本大数据的查询处理方法及*** |
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 |