一种基于执行反馈的SQL动态修正方法与流程
本发明涉及数据库查询处理、自然语言查询生成和智能体执行,尤其是指一种基于执行反馈的sql动态修正方法。
背景技术:
1、现有text2sql系统或数据分析智能体通常先根据用户问题和数据库schema生成候选sql,再将候选sql发送至数据库执行。由于目标数据库方言存在差异、schema发生变化、表字段引用不正确、别名或连接关系错误、数据类型不兼容以及聚合与分组关系不成立等原因,候选sql可能在执行阶段失败。
2、对于执行失败的sql,一种常见处理方式是将数据库返回的错误文本直接补充至生成上下文中,再次请求生成模块产生sql。该处理方式虽然能够利用部分错误信息,但错误文本的格式和粒度取决于数据库或驱动程序,通常仅描述表面错误,不能直接指出错误涉及的sql片段、数据库对象以及能够采用的修正范围。
3、当执行反馈未被转换为可传递的错误解析结果时,后续重写过程可能重复生成相同或相近的错误sql,也可能在修正局部错误时改变原有指标、维度、筛选条件或时间条件。另一方面,权限拒绝、数据源不可用等执行失败并不一定能够通过重写sql解决,若不区分可重写错误与不可重写错误,容易产生无效循环。
技术实现思路
1、为此,本发明所要解决的技术问题在于克服现有技术中执行反馈粒度、sql结构粒度和修正动作粒度不一致,导致错误定位不明确、sql重写范围不可控、原查询语义容易发生无依据变化以及自动重试缺少明确退出条件的问题。
2、为解决上述技术问题,本发明提供一种基于执行反馈的sql动态修正方法,包括:
3、接收候选sql,并获取与所述候选sql对应的目标数据源信息、目标sql方言、schema上下文以及可用的上游查询语义上下文;当未提供所述上游查询语义上下文时,从所述候选sql提取基准语义约束;将所述上游查询语义上下文或所述基准语义约束确定为前置语义约束,并基于所述候选sql、所述目标数据源信息、所述目标sql方言、所述schema上下文以及所述前置语义约束形成任务上下文;
4、基于所述任务上下文向所述目标数据源提交所述候选sql;当执行成功时,输出所述候选sql作为可执行sql并结束当前修正流程;当执行失败时,获取与本次执行对应的错误码、错误文本、错误位置及执行环境信息,并据此形成执行失败信息;
5、基于所述候选sql、所述执行失败信息、所述执行环境信息、所述schema上下文、所述前置语义约束以及修正历史构造结构化执行反馈对象,并对所述结构化执行反馈对象中的异构执行失败信息进行规范化处理,得到规范化错误事件;
6、按照所述目标sql方言解析所述候选sql,形成包含查询层级、子句类型、表达式节点、对象引用及节点标识的sql结构化表示,以作为所述规范化错误事件进行结构化定位的基础;
7、基于所述规范化错误事件以及所述sql结构化表示,将所述规范化错误事件与所述sql结构化表示中的sql结构节点、所述schema上下文中的数据库对象以及与所述目标sql方言对应的方言规则进行对应,并根据对应结果形成包含定位状态、受影响节点或子句、相关数据库对象以及候选替代对象或等价表达的错误分析结果;
8、基于所述错误分析结果判断所述定位状态;当所述定位状态为不可重写时,停止sql自动重写并输出转交信息;当所述定位状态为存在歧义时,保留候选替代对象并输出待澄清项或请求补充schema;当所述定位状态为可修正时,根据受影响节点数量、受影响节点之间的结构关系以及候选替代对象或等价表达的确定情况,确定节点替换、子句重构或受约束重新生成中的一种修正范围,并形成用于限定修正目标、允许使用的数据库对象、允许的修正动作、方言限制及语义保持约束的修正计划;
9、基于所述修正计划对所述sql结构化表示中的sql结构节点执行增加、删除或替换,或者在所述修正计划的约束下重新生成至少一个修正候选,并根据各所述修正候选相对于修正前sql的结构变化生成对应的修正差异;
10、针对各所述修正候选,根据按照所述目标sql方言解析得到的解析结果、所引用数据库对象在所述schema上下文中的存在性、与所述修正计划的符合性以及所述修正差异进行过滤,并优先选取变化范围位于所述修正计划限定范围内、限定范围外的sql结构保持不变或在规范化表示上等价,且未引入不能由所述错误分析结果和所述修正计划解释的业务表、字段或条件的修正候选作为修正后sql;
11、从所述修正后sql提取语义投影,并将所述语义投影与所述前置语义约束进行对应,得到语义保持检查结果;当所述语义保持检查结果为不通过时,记录对应的不一致项,拒绝所述修正后sql并返回修正计划生成过程重新决策;当所述语义保持检查结果为通过时,将所述修正后sql提交至所述目标数据源重新执行;
12、基于所述修正后sql的重新执行结果,在重新执行成功时输出所述修正后sql及对应的修正记录;在重新执行失败时,获取新的执行失败信息,按照所述规范化处理形成新的规范化错误事件,并将所述新的规范化错误事件、所述修正差异及对应的失败签名加入所述修正历史;根据更新后的所述修正历史、所述重新执行结果以及预设的终止条件确定后续路径,其中,当确定继续修正时,将所述修正后sql作为新的候选sql并基于所述新的执行失败信息进入下一轮修正,当确定请求澄清、转交处理或终止自动修正时,输出对应的待澄清信息、转交信息或终止原因。
13、在本发明的一种实施方式中,构造所述结构化执行反馈对象时,将与当前候选sql执行及修正相关的信息按照任务信息、执行环境信息、执行失败信息、schema上下文、前置语义约束及修正历史进行关联,其中,所述结构化执行反馈对象包括任务标识、候选sql、sql参数、候选版本、数据源类型、目标sql方言、连接或执行引擎标识、执行状态、错误码、错误文本、错误位置、与所述候选sql相关的表、字段、字段类型、表字段关系、schema版本、目标指标、维度、筛选条件、时间条件、此前候选sql、已执行的修正动作以及相应执行结果中的一种或多种;根据所述目标数据源能够提供的信息对相应字段进行赋值,对于所述目标数据源不能提供的信息,将对应字段置空或设置状态标识,以使不同目标数据源产生的执行失败信息采用统一的数据结构进入后续错误解析过程。
14、在本发明的一种实施方式中,对所述执行失败信息进行规范化处理,得到包括规范化错误类别、原始错误证据、由错误信息直接指示的对象名称或函数名称以及错误位置的所述规范化错误事件;针对同一候选sql,基于所述目标sql方言解析所述候选sql,将所述候选sql表示为select子句、from子句、join子句、where子句、group by子句、having子句、order by子句中的至少一种查询子句,并将相应查询子句进一步表示为字段引用节点、函数节点、运算节点、常量节点、别名节点或类型转换节点,以形成用于对所述规范化错误事件进行定位的sql结构化表示。
15、在本发明的一种实施方式中,形成所述错误分析结果的过程包括:
16、根据所述规范化错误事件中的错误位置、错误文本中出现的对象名称或函数名称,并结合所述sql结构化表示中的字段限定关系、别名作用域以及查询层级,确定与所述规范化错误事件对应的查询子句及sql结构节点;
17、对于涉及数据库对象的所述sql结构节点,进一步结合所述schema上下文中的字段类型以及表字段从属关系确定相关数据库对象;对于不涉及数据库对象的函数节点或语法节点,结合与所述目标sql方言对应的方言规则确定对应的函数表达或语法表达;
18、基于所述sql结构节点、所述相关数据库对象或所述函数表达、语法表达所在的当前查询作用域,根据所述schema上下文中的schema关系或所述方言规则形成一个或多个候选替代对象或等价表达,并将所述查询子句、所述sql结构节点、所述相关数据库对象以及所述候选替代对象或等价表达写入所述错误分析结果。
19、在本发明的一种实施方式中,根据所述规范化错误事件与sql结构节点、查询子句及相关数据库对象之间的对应结果确定所述定位状态,所述定位状态包括可修正、存在歧义和不可重写;
20、当所述对应结果能够明确受影响sql结构节点或查询子句,且依据现有的schema上下文和方言规则能够确定修正范围时,将所述定位状态确定为可修正,并基于所述受影响sql结构节点或查询子句进入自动修正;
21、当所述对应结果存在多个结构上可行但业务语义不同的候选替代对象时,将所述定位状态确定为存在歧义,并保留所述多个候选替代对象,以用于后续补充schema或生成待澄清项;
22、当所述对应结果表明执行失败由权限、连接、数据源状态或其他非sql表达原因导致时,将所述定位状态确定为不可重写,并基于所述不可重写状态停止sql自动重写。
23、在本发明的一种实施方式中,基于所述错误分析结果生成所述修正计划的过程包括:
24、当所述错误分析结果表明错误对应一个表达式节点且存在结构兼容的候选替代对象或等价表达时,将所述表达式节点确定为修正目标,并选择节点替换作为对应修正范围;
25、当所述错误分析结果表明多个相互依赖的受影响节点位于同一查询子句或同一查询层级时,根据所述多个相互依赖的受影响节点确定待调整的查询子句或查询层级,并选择子句重构作为对应修正范围;
26、当所述错误分析结果表明错误跨越多个查询子句、原sql结构不能通过局部修正消除错误,或局部修正后仍产生相同结构性失败时,根据所述schema上下文、所述目标sql方言及所述前置语义约束选择受约束重新生成作为对应修正范围;
27、当所述定位状态为存在歧义时,基于保留的所述候选替代对象请求补充schema或生成待澄清项,在获得能够消除所述歧义的信息后重新确定所述定位状态;
28、当所述定位状态为不可重写时,基于所述不可重写状态停止sql重写并输出转交信息。
29、在本发明的一种实施方式中,在依据所述修正计划形成多个所述修正候选后,按照以下方式确定待执行的修正后sql:
30、分别按照所述目标sql方言解析各所述修正候选,并结合所述schema上下文以及所述修正计划的强制约束,剔除不能按照所述目标sql方言解析、引用所述schema上下文中不存在的数据库对象或者违反所述修正计划强制约束的修正候选;
31、针对经过剔除后保留的修正候选,根据各修正候选相对于修正前sql的修正差异,优先保留变化节点位于所述修正计划限定范围内、所述限定范围外的sql结构保持不变或在规范化表示上等价,且未引入不能由所述错误分析结果和所述修正计划解释的业务表、字段或条件的修正候选;
32、当经上述处理后剩余多个修正候选,且多个修正候选之间存在无法由现有信息消除的业务语义差异时,基于所述业务语义差异生成待澄清项,并停止将存在所述业务语义差异的修正候选提交执行,直至获得用于消除所述业务语义差异的澄清信息。
33、在本发明的一种实施方式中,在得到所述修正后sql后,从所述修正后sql提取包括表、字段、聚合表达式、分组字段、筛选字段、筛选值、时间字段及时间范围的所述语义投影;
34、将所述语义投影中与目标指标、维度、筛选条件及时间条件对应的内容与所述前置语义约束进行对应,以检查所述修正后sql是否保持已确定的目标指标和维度、筛选值是否仍作用于相应筛选字段以及时间范围是否仍作用于相应时间字段;
35、基于所述错误分析结果及所述修正计划,进一步检查所述修正后sql是否增加了不能由所述错误分析结果和所述修正计划解释的业务表、字段或条件,并根据上述对应及检查结果确定所述修正后sql是否通过所述语义保持检查。
36、在本发明的一种实施方式中,在所述修正后sql重新执行失败时,基于本次重新执行对应的规范化错误类别、受影响结构或相关数据库对象以及对应sql结构片段生成所述失败签名,并将所述失败签名与所述修正历史中记录的历史失败签名进行比较;
37、同时,将所述修正后sql进行规范化处理得到规范化表示,并将所述规范化表示与所述修正历史中的历史sql规范化表示进行比较;
38、当比较结果满足所述修正后sql与历史sql在规范化表示上等价、连续修正产生相同失败签名且修正差异未形成新的可行路径、错误不可重写、信息不足、无可行修正路径或者达到配置的尝试预算中的至少一种时,确定满足所述终止条件,并据此终止自动修正。
39、在本发明的一种实施方式中,在形成所述规范化错误事件后,根据执行失败的具体表现将所述规范化错误类别确定为语法或方言错误、表或字段引用错误、别名与限定错误、连接关系错误、数据类型或值错误、聚合与分组错误以及不可通过sql重写解决的错误中的至少一种;
40、基于确定的所述规范化错误类别、所述受影响节点或子句以及所述相关数据库对象形成相应的所述修正计划,其中,对于语法或方言错误,在所述目标sql方言约束下执行方言等价表达替换;对于表或字段引用错误,基于所述候选替代对象执行对象引用替换;对于别名与限定错误,根据别名作用域及查询层级执行别名或查询层级调整;对于连接关系错误,根据连接两侧数据库对象及schema关系执行连接片段重构;对于数据类型或值错误,根据相关表达式的字段类型及参数信息执行类型转换或参数格式调整;对于聚合与分组错误,根据目标指标及维度之间的对应关系执行聚合表达式或分组结构调整;对于不可通过sql重写解决的错误,停止sql自动重写并转交相应处理流程。
41、在本发明的一种实施方式中,还提供一种基于执行反馈的sql动态修正系统,所述系统包括sql接收模块、sql执行模块、执行反馈规范化模块、sql结构投影模块、错误定位模块、修正计划模块、sql修正模块、语义保持检查模块以及修正流程控制模块;各模块按照候选sql、结构化执行反馈对象、规范化错误事件、sql结构化表示、错误分析结果、修正计划、修正差异、语义保持检查结果以及重新执行结果之间的数据传递关系协同工作,以实现上述基于执行反馈的sql动态修正方法。
42、本发明还提供一种基于执行反馈的sql动态修正系统,包括sql接收模块、sql执行模块、执行反馈规范化模块、sql结构投影模块、错误定位模块、修正计划模块、sql修正模块、语义保持检查模块以及修正流程控制模块;
43、所述sql接收模块用于接收候选sql、目标数据源信息、目标sql方言、schema上下文以及可用的上游查询语义上下文,在未提供所述上游查询语义上下文时从所述候选sql提取基准语义约束,并将所述上游查询语义上下文或所述基准语义约束确定为前置语义约束;
44、所述sql执行模块用于向目标数据源提交所述候选sql,并在执行失败时获取执行失败信息;
45、所述执行反馈规范化模块用于基于所述候选sql、所述执行失败信息、执行环境信息、所述schema上下文、所述前置语义约束以及修正历史构造结构化执行反馈对象,并将异构执行失败信息规范化为规范化错误事件;
46、所述sql结构投影模块用于按照所述目标sql方言解析所述候选sql,形成sql结构化表示;
47、所述错误定位模块用于将所述规范化错误事件与所述sql结构化表示中的sql结构节点、所述schema上下文中的数据库对象以及与所述目标sql方言对应的方言规则进行对应,以形成错误分析结果;
48、所述修正计划模块用于根据所述错误分析结果中的定位状态及受影响范围确定修正路径,并在定位状态为可修正时形成修正计划;
49、所述sql修正模块用于按照所述修正计划形成至少一个修正候选及对应的修正差异,并根据目标sql方言、schema上下文和修正计划对所述修正候选进行过滤以获得修正后sql;
50、所述语义保持检查模块用于提取所述修正后sql的语义投影,将所述语义投影与所述前置语义约束进行对应,并输出语义保持检查结果;
51、所述修正流程控制模块用于在所述语义保持检查结果为通过时控制所述修正后sql重新执行,并根据重新执行结果、所述修正历史以及终止条件确定输出修正后sql、继续修正、请求澄清、转交处理或终止自动修正。
52、本发明的上述技术方案相比现有技术具有以下优点:
53、本发明所述的一种基于执行反馈的sql动态修正方法,通过将候选sql、执行环境信息、执行失败信息、schema上下文、前置语义约束和修正历史组织为结构化执行反馈对象,并将异构执行失败信息规范化为规范化错误事件,使不同数据源的执行失败信息能够进入统一的后续处理流程。
54、本发明通过将候选sql转换为带有查询层级、子句类型和节点标识的sql结构化表示,并将规范化错误事件定位至具体sql结构节点、查询子句及相关数据库对象,使错误分析结果能够直接驱动后续修正决策。
55、本发明通过区分可修正、存在歧义和不可重写三种定位状态,使不同错误分别进入自动修正、schema补充或澄清、转交处理路径,能够减少在证据不足时猜测替代对象以及对非sql表达错误进行无效重写。
56、本发明通过依据受影响范围选择节点替换、子句重构或受约束重新生成,并记录各修正候选相对于修正前sql的修正差异,能够限制sql变化范围,降低局部错误引起整条sql无约束变化的风险。
57、本发明通过在重新执行前提取修正后sql的语义投影,并与前置语义约束进行对应检查,能够识别并拒绝虽然语法成立但无依据改变目标指标、维度、筛选条件或时间条件的修正结果。
58、本发明通过将新的规范化错误事件、修正差异和失败签名纳入修正历史,并在sql规范化表示重复、失败签名重复且修正差异未形成新的可行路径、错误不可重写或达到尝试预算时终止自动修正,能够形成具有明确进入条件、循环条件和退出条件的修正闭环。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com