一种SQL语句生成方法、装置、设备及存储介质与流程

文档序号:33140085发布日期:2023-02-03 19:59阅读:27来源:国知局
一种sql语句生成方法、装置、设备及存储介质
技术领域
:1.本技术涉及大数据技术,尤其涉及一种结构化查询语言(structuredquerylanguage,sql)语句生成方法、装置、设备及存储介质。
背景技术
::2.随着通信技术及信息技术的不断发展,数据的体量以指数形式爆炸式增长,大量数据的汇总成为急需解决的问题。3.hadoop作为一个典型的大数据技术,被很多公司采用,各公司往往会在不同地区或机房,部署多个hadoop集群,形成“一中心多边缘”的部署模式。在这种模式下,中心集群发起任务的需求,各边缘集群对任务进行响应。因此,如何将任务根据各个边缘集群进行拆分,形成适合该边缘集群的子任务,又如何将sql这一常用的数据处理语言,进行有效分析、拆分成为急需解决的问题。现有技术中针对sql的拆分与生成,往往是通过人工方式进行处理,具体包括以下步骤:中心集群首先对业务逻辑进行描述,并将描述以一定形式下发给边缘集群;边缘集群根据业务描述输出相应sql语句,对属于本边缘集群的数据进行汇总;边缘集群将处理后数据上报中心集群。4.然而,上述方案存在的缺陷是:从生成业务逻辑描述,再到业务逻辑与sql间的转换,整个过程都需要大量的人工干预;由于人工干预程度高,不同人的理解存在差异,导致sql输出不统一,最终将导致中心集群的结果数据难以使用,甚至不可用。技术实现要素:5.为解决上述技术问题,本技术期望提供一种sql语句生成方法及装置。6.本技术的技术方案是这样实现的:7.第一方面,提供了一种sql语句生成方法,该方法包括:8.获取原始sql语句;其中,所述原始sql语句包括主表元数据;9.对所述原始sql语句进行解析,生成第一语法树;10.基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,得到m个第二语法树;其中,m为正整数;11.对所述m个第二语法树进行反解析,生成m个子sql语句。12.上述方案中,所述元数据包括表的表名和对应的至少一个列名;所述映射关系包括主表的表名和列名与子表的表名和列名的映射关系。13.上述方案中,所述基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,包括:根据标识表名的第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的主表的表名;根据标识第一列名的第二关键字段查询所述第一语法树,确定所述第二关键字段所标识的主表的至少一个第一列名;其中,所述第一列名包括主表的列名;从所述映射关系中查找所述主表的表名对应的m组子表的表名,以及所述主表的第一列名对应的m组子表的第一列名;其中,所述第一列名包括子表的列名;利用m组子表的表名和第一列名分别对所述第一语法树中主表的表名和第一列名进行替换,得到所述m个第二语法树。14.上述方案中,若所述原始sql语句包括至少两个主表,所述基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,包括:根据所述第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的所述至少两个主表的表名;根据标识第二列名的第三关键字段查询所述第一语法树,确定所述第三关键字段所标识的所述至少两个主表的第二列名;其中,所述第二列名包括主表的表名和列名;从所述映射关系中查找每个主表的表名对应的m组子表的表名,以及每个主表的第二列名对应的m组子表的第二列名;其中,所述第二列名包括子表的表名和列名;利用m组子表的表名和第二列名分别对所述第一语法树中每个主表的表名和第二列名进行替换,得到所述m个第二语法树。15.上述方案中,所述元数据还包括表的数据库名;所述映射关系还包括主表的数据库名与子表的数据库名的映射关系。16.上述方案中,所述基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,还包括:根据所述第一关键字段查询所述第一语法树,确定每个主表对应的数据库名;从所述映射关系中查找每个主表的数据库名对应的m组子表的数据库名;利用m组子表的数据库名对所述第一语法树中每个主表的数据库名分别进行替换。17.上述方案中,所述生成m个子sql语句之后,所述方法还包括:通过hive自带的sql编译功能对每个子sql语句进行语义检查;确定语义检查无误时,将所述m个子sql语句对应发送至m个边缘集群进行分片计算。18.第二方面,提供了一种sql语句生成装置,该装置包括:19.获取单元,用于获取原始sql语句;其中,所述原始sql语句包括主表元数据;20.解析单元,用于对所述原始sql语句进行解析,生成第一语法树;21.替换单元,用于基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,得到m个第二语法树;其中,m为正整数;22.反解析单元,用于对所述m个第二语法树进行反解析,生成m个子sql语句。23.第三方面,提供了一种sql语句生成设备,包括:处理器和配置为存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器配置为运行所述计算机程序时,执行前述方法的步骤。24.第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其中,该计算机程序被处理器执行时实现前述方法的步骤。25.采用上述技术方案,根据预设的统一映射关系,对中心集群下发的原始sql语句进行转换可自动生成匹配m个边缘集群的子sql语句,这样的转换过程无需人工干预,且转换标准统一,保证边缘集群获得的子sql语句的正确性,便于中心集群统计各个边缘集群的数据。附图说明26.图1为本技术实施例中sql语句生成方法的第一流程示意图;27.图2为本技术实施例中sql语句生成方法的第二流程示意图;28.图3为本技术实施例中sql语句生成方法的第三流程示意图;29.图4为本技术实施例中sql语句生成装置组成的结构示意图;30.图5为本技术实施例中sql语句生成设备组成的结构示意图。具体实施方式31.为了能够更加详尽地了解本技术实施例的特点与技术内容,下面结合附图对本技术实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本技术实施例。32.实施例一33.本技术实施例提供了一种sql语句生成方法,图1为本技术实施例中sql语句生成方法的第一流程示意图,如图1所示,该sql语句生成方法具体可以包括:34.步骤101:获取原始sql语句;其中,所述原始sql语句包括主表元数据;35.需要说明的是,主表元数据为描述主表属性的信息。主表元数据至少包括主表的表名和对应的至少一个列名。36.实际应用中,业务描述作为中心集群的输入,输出业务描述对应的原始sql语句,sql语句生成设备获取中心集群发送的原始sql语句。37.示例性地,若中心集群(可理解为总公司)下发的原始sql语句中包括两个主表,表1为两个主表的元数据表,如表1所示,一个主表的表名(也简称为“主表名”)为employees,对应两个列名(也简称为“主列名”),即id和name。另一个主表的表名为orders,对应三个列名,即id、price和employee_id。38.表1两个主表的元数据表[0039][0040]步骤102:对所述原始sql语句进行解析,生成第一语法树;[0041]需要说明的是,实现该步骤之前,需要对原始sql语句进行语义检查,确定语义检查无误时,利用hive自带的解析工具对原始sql语句进行解析,生成第一语法树。[0042]实际应用中,对原始sql语句进行语义检查时,sql语句生成设备并不与中心集群hive数据库进行绑定,不调用中心集群hive数据库进行实际的sql操作,而是通过模拟hive数据库来进行sql编译做语义检查操作。具体是通过在进程内模拟一个hive环境,创建对应的数据库和表,然后将用户提交的原始sql语句调用内部hive自带的sql编译方法进行编译,通过编译结果来判断语义是否正确。根据编译结果确定语义检查无误时,对原始sql语句进行解析;根据编译结果确定语义检查错误时,通过sql语句生成设备上的显示屏提示原始sql语句存在语义错误,也就不能进行解析操作。[0043]步骤103:基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,得到m个第二语法树;其中,m为正整数;[0044]需要说明的是,子表元数据为描述子表属性的信息。子表元数据至少包括子表的表名(也简称为“子表名”)和对应的至少一个列名(也简称为“子列名”)。[0045]实际应用中,实现该步骤之前,将中心集群与每个边缘集群的表、列信息建立关联,即就是设置好中心集群的主表的表名和列名与边缘集群的子表的表名和列名的映射关系。进行替换操作时,利用m组子表的表名和列名分别对第一语法树中主表的表名和列名进行替换,得到m个第二语法树。这里,建立映射关系,为中心集群管理者提供表关系的统一视图,也便于sql语句生成设备执行替换操作。[0046]示例性地,若存在三个边缘集群(可理解为总公司下面的三个子公司),这里,总公司需要统计各个子公司的某个表的至少一个列名对应的数据,而各个子公司子表的表名及对应的至少一个列名可能与总公司主表的表名及对应的至少一个列名不相同,导致无法统计数据,故预设设置各个子公司子表的表名及对应的至少一个列名与总公司主表的表名及对应的至少一个列名的映射关系。这里,针对主表的表名与各个子表的表名的映射关系如表2所示。[0047]表2主表的表名与各个子表的表名的映射关系表[0048]主表名公司1子表名公司2子表名公司3子表名employeeseemployees_zjguangdong_empordersoorders_zjguangdong_ord[0049]如表2所示,主表名为employees,对应的公司1子表名为e,对应的公司2子表名为employees_zj,对应的公司3子表名为guangdong_emp。主表名为orders,对应的公司1子表名为o,对应的公司2子表名为orders_zj,对应的公司3子表名为guangdong_ord。[0050]针对主表的至少一个列名与各个子表的至少一个列名的映射关系如表3所示,即主表名为employees,主列名包括id和name,对应的公司1子列名包括eid和ename,对应的公司2子列名包括id_zj和name_zj,对应的公司3子列名包括id和name。主表名为orders,主列名包括id、price和employee_id,对应的公司1子列名包括oid、oprice和oeid,对应的公司2子列名包括id_zj、price_zj和eid_zj,对应的公司3子列名包括id、price和eid。[0051]表3主表的至少一个列名与各个子表的至少一个列名的映射关系[0052][0053]对第一语法树中主表元数据进行替换操作时,根据映射关系中公司1的子表名e、子列名eid、ename对表1进行对应替换,得到第二语法树中公司1子表的元数据表(即表3)。[0054]表3公司1子表的元数据表[0055][0056]对第一语法树中主表元数据进行替换操作时,根据映射关系中公司2的子表名e、子列名eid、ename对表1进行对应替换,得到第二语法树中公司2子表的元数据表(即表4)。[0057]表4公司2子表的元数据表[0058][0059][0060]对第一语法树中主表元数据进行替换操作时,根据映射关系中公司3的子表名e、子列名eid、ename对表1进行对应替换,得到第二语法树中公司3子表的元数据表(即表5)。[0061]表5公司3子表的元数据表[0062][0063]还需要说明的是,主表元数据还包括主表的数据库名,子表元数据还包括子表的数据库名,则映射关系还包括主表的数据库名与子表的数据库名的映射关系。进行替换操作时,还需要利用m组子表的数据库名分别对第一语法树中主表的数据库名进行替换。[0064]这里,相比于直接对原始sql语句中主表的表名、列名和数据库名的查找替换,通过第一语法树进行原始sql语句中表名、列名和数据库名的查找替换,其准确性更高。[0065]步骤104:对所述m个第二语法树进行反解析,生成m个子sql语句。[0066]这里,通过模拟的hive环境,利用hive自带的反解析工具对m个第二语法树进行反解析,生成m个子sql语句。[0067]在一些实施例中,所述生成m个子sql语句之后,所述方法还包括:通过hive自带的sql编译功能对每个子sql语句进行语义检查;确定语义检查无误时,将所述m个子sql语句对应发送至m个边缘集群进行分片计算。[0068]也就是说,将m个子sql语句对应发送至m个边缘集群进行分片计算之前,需要利用hive自带的sql编译方法对每个子sql语句进行编译,通过编译结果来判断语义是否正确。根据编译结果确定语义检查无误时,再将m个子sql语句对应发送至m个边缘集群进行分片计算;根据编译结果确定语义检查错误时,通过sql语句生成设备上的显示屏提示对应的子sql语句存在语义错误,也就不能发送至m个边缘集群进行分片计算。[0069]这里,步骤101至步骤104的执行主体可以为sql语句生成设备的处理器。[0070]采用上述技术方案,根据预设的统一映射关系,对中心集群下发的原始sql语句进行转换可自动生成匹配m个边缘集群的子sql语句,这样的转换过程无需人工干预,且转换标准统一,保证边缘集群获得的子sql语句的正确性,便于中心集群统计各个边缘集群的数据。[0071]实施例二[0072]在上述实施例的基础上,针对原始sql语句中不包括关联表,即包括一个表时,本技术提供一种具体的sql语句生成方法,图2为本技术实施例中sql语句生成方法的第二流程示意图。[0073]如图2所示,具体步骤包括如下:[0074]步骤201:获取原始sql语句;其中,所述原始sql语句包括主表元数据;[0075]需要说明的是,主表元数据为描述主表属性的信息。示例性地,主表元数据至少包括主表的表名和对应的至少一个第一列名(即主表的列名)。[0076]实际应用中,业务描述作为中心集群的输入,输出业务描述对应的原始sql语句,sql语句生成设备获取中心集群发送的原始sql语句。[0077]步骤202:对所述原始sql语句进行解析,生成第一语法树;[0078]需要说明的是,实现该步骤之前,需要对原始sql语句进行语义检查,确定语义检查无误时,利用hive自带的解析工具对原始sql语句进行解析,生成第一语法树。[0079]示例性地,若原始sql语句为:selecta,todate(b),cfromtwhered!=0,解析后的第一语法树为:[0080][0081]步骤203:根据标识表名的第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的主表的表名;[0082]需要说明的是,第一语法树中至少包括标识表名的第一关键字段和对应主表的表名,故通过查询第一语法树中的第一关键字段,即可确定主表的表名。[0083]这里,基于上述示例,tok_tabname为第一关键字段,t为主表的表名。具体的,查询第一语法树,查询到tok_tabname字段时,下一个字段即为主表的表名t。[0084]步骤204:根据标识第一列名的第二关键字段查询所述第一语法树,确定所述第二关键字段所标识的主表的至少一个第一列名;其中,所述第一列名包括主表的列名;[0085]需要说明的是,第一语法树中还包括标识列名的第二关键字段和对应主表的至少一个第一列名(即主表的列名),故通过查询第一语法树中的第二关键字段,即可确定主表的至少一个第一列名。[0086]这里,基于上述示例,tok_table_or_col为第二关键字段,a、b、c和d分别为主表的列名。具体的,查询第一语法树,查询到tok_table_or_col字段时,下一个字段即为主表的第一列名,分别为a、b、c和d。[0087]步骤205:基于预设的主表元数据与m组子表元数据的映射关系,查找所述主表的表名对应的m组子表的表名,以及所述主表的第一列名对应的m组子表的第一列名;其中,所述第一列名包括子表的列名;[0088]需要说明的是,子表元数据为描述子表属性的信息。子表元数据至少包括子表的表名和对应的至少一个第一列名(即子表的列名)。[0089]实际应用中,实现该步骤之前,将中心集群与每个边缘集群的表、列信息建立关联,即就是设置好中心集群的主表的表名和列名与边缘集群的子表的表名和列名的映射关系。在进行替换操作之前,需要从映射关系中查找主表的表名对应的m组子表的表名,以及主表的第一列名对应的m组子表的第一列名。这里,建立映射关系,为中心集群管理者提供表关系的统一视图,也便于sql语句生成设备执行替换操作。[0090]基于上述示例,若根据映射关系查找主表的表名t对应的一组子表的表名t1,以及主表的第一列名a、b、c和d分别对应的一组子表的第一列名a1、b1、c1和d1。[0091]步骤206:利用m组子表的表名和第一列名分别对所述第一语法树中主表的表名和第一列名进行替换,得到所述m个第二语法树;[0092]基于上述示例,利用子表的表名和第一列名分别对第一语法树中主表的表名和第一列名进行替换后,对应的第二语法树为:[0093][0094][0095]基于步骤203至步骤206,在一些实施例中,主表元数据还包括主表的数据库名,子表元数据还包括子表的数据库名,映射关系还包括主表的数据库名与子表的数据库名的映射关系;根据所述第一关键字段查询所述第一语法树,确定每个主表对应的数据库名;从所述映射关系中查找每个主表的数据库名对应的m组子表的数据库名;利用m组子表的数据库名对所述第一语法树中每个主表的数据库名分别进行替换。[0096]即就是说,进行替换操作时,还需要利用m组子表的数据库名分别对第一语法树中主表的数据库名进行替换。[0097]示例性地,若主表元数据还包括主表的数据库名和别名,那解析后的第一语法树可以为:[0098][0099]这里,test为主表的数据库名,t为主表的表名,abc为主表的别名。利用m组子表的数据库名和表名分别对主表的数据库名test和主表的表名t进行替换,而主表的别名保持不变。[0100]这里,相比于直接对原始sql语句中主表的表名、列名和数据库名的查找替换,通过第一语法树进行原始sql语句中表名、列名和数据库名的查找替换,其准确性更高。[0101]步骤207:对所述m个第二语法树进行反解析,生成m个子sql语句。[0102]基于上述示例,对步骤206中示例的第二语法树进行反解析后,对应的子sql语句为:selecta1,todate(b1),c1fromt1whered1!=0。[0103]在一些实施例中,所述生成m个子sql语句之后,所述方法还包括:通过hive自带的sql编译功能对每个子sql语句进行语义检查;确定语义检查无误时,将所述m个子sql语句对应发送至m个边缘集群进行分片计算。[0104]采用上述技术方案,根据预设的统一映射关系,对中心集群下发的原始sql语句进行转换可自动生成匹配m个边缘集群的子sql语句,这样的转换过程无需人工干预,且转换标准统一,保证边缘集群获得的子sql语句的正确性,便于中心集群统计各个边缘集群的数据。[0105]实施例三[0106]在上述实施例的基础上,针对原始sql语句中包括关联表,即包括至少两个主表,每个主表之间的列名存在一定的关联关系,本技术提供另一种具体的sql语句生成方法,图3为本技术实施例中sql语句生成方法的第三流程示意图。[0107]如图3所示,具体步骤包括如下:[0108]步骤301:获取原始sql语句;其中,所述原始sql语句包括主表元数据;[0109]需要说明的是,主表元数据为描述主表属性的信息。示例性地,主表元数据至少包括主表的表名和对应的至少一个第二列名;其中,针对主表的列名与子表的列名相同(即存在直接关联关系)时,第二列名包括主表的表名和列名;针对主表的列名与子表的列名不相同时,第二列名包括列名或者主表的表名和列名。[0110]实际应用中,业务描述作为中心集群的输入,输出业务描述对应的原始sql语句,sql语句生成设备获取中心集群发送的原始sql语句。[0111]步骤302:对所述原始sql语句进行解析,生成第一语法树;[0112]需要说明的是,实现该步骤之前,需要对原始sql语句进行语义检查,确定语义检查无误时,利用hive自带的解析工具对原始sql语句进行解析,生成第一语法树。[0113]示例性地,若原始sql语句为:fromt1joint2ont1.c1=t2.c1或者fromt1,t2wheret1.c1=t2.c1,解析后的第一语法树为:[0114][0115]其中,tok_join字段表示t1和t2表存在关联关系。[0116]步骤303:根据所述第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的所述至少两个主表的表名;[0117]需要说明的是,第一语法树中包括标识表名的至少两个第一关键字段和至少两个主表的表名,故通过查询第一语法树中的第一关键字段,即可确定每个主表的表名。[0118]这里,基于上述示例,tok_tabname为第一关键字段,t1和t2分别为主表的表名。具体的,查询第一语法树,查询到tok_tabname字段时,下一个字段即为主表的表名,即分别为t1和t2。[0119]步骤304:根据标识第二列名的第三关键字段查询所述第一语法树,确定所述第三关键字段所标识的所述至少两个主表的第二列名;其中,所述第二列名包括主表的表名和列名;[0120]需要说明的是,第一语法树中还包括标识第二列名的第三关键字段和对应主表的至少一个第二列名(即包括主表的表名和列名),故通过查询第一语法树中的第三关键字段,即可确定主表的至少一个第二列名。[0121]这里,基于上述示例,tok_table_or_col为第三关键字段,t1.c1和t2.c1分别为主表的列名。具体的,查询第一语法树,查询到tok_table_or_col字段时,下一个字段即为主表的表名,下下一个字段即为主表的列名,组合起来分别表示为t1.c1和t2.c1。[0122]上述提及的第二列名t1.c1和t2.c1,其t1和t2都包括c1,以第二列名方式表示可准确区分t1和t2。[0123]步骤305:从所述映射关系中查找每个主表的表名对应的m组子表的表名,以及每个主表的第二列名对应的m组子表的第二列名;其中,所述第二列名包括子表的表名和列名;[0124]需要说明的是,子表元数据为描述子表属性的信息。子表元数据至少包括子表的表名和对应的至少一个第二列名(即子表的表名和列名)。[0125]实际应用中,实现该步骤之前,将中心集群与每个边缘集群的表、列信息建立关联,即就是设置好中心集群的主表的表名和列名与边缘集群的子表的表名和列名的映射关系。在进行替换操作之前,需要从映射关系中查找至少两个主表中每个主表的表名对应的m组子表的表名,以及每个主表的第二列名对应的m组子表的第二列名。这里,建立映射关系,为中心集群管理者提供表关系的统一视图,也便于sql语句生成设备执行替换操作。[0126]基于上述示例,若根据映射关系查找主表的表名t1和t2对应的一组子表的表名t3和t4,以及主表的第二列名t1.c1和t2.c1分别对应的一组子表的第一列名t3.c2和t3.c2。[0127]步骤306:利用m组子表的表名和第二列名分别对所述第一语法树中每个主表的表名和第二列名进行替换,得到所述m个第二语法树;[0128]基于上述示例,利用子表的表名和第二列名分别对第一语法树中主表的表名和第二列名进行替换后,对应的第二语法树为:[0129][0130]基于步骤303至步骤306,在一些实施例中,主表元数据还包括主表的数据库名,子表元数据还包括子表的数据库名,映射关系还包括主表的数据库名与子表的数据库名的映射关系;根据所述第一关键字段查询所述第一语法树,确定每个主表对应的数据库名;从所述映射关系中查找每个主表的数据库名对应的m组子表的数据库名;利用m组子表的数据库名对所述第一语法树中每个主表的数据库名分别进行替换。[0131]即就是说,进行替换操作时,还需要利用m组子表的数据库名分别对第一语法树中至少两个主表中每个主表的数据库名进行替换。[0132]示例性地,若主表元数据还包括主表的数据库名和别名,那解析后的第一语法树可以为:[0133][0134][0135]这里,test为主表的数据库名,t为主表的表名,abc为主表的别名。利用m组子表的数据库名和表名分别对主表的数据库名test和主表的表名t进行替换,而主表的别名保持不变。[0136]这里,相比于直接对原始sql语句中表名、列名和数据库名的查找替换,通过第一语法树进行原始sql语句中表名、列名和数据库名的查找替换,其准确性更高。[0137]步骤307:对所述m个第二语法树进行反解析,生成m个子sql语句。[0138]基于上述示例,对步骤306中示例的第二语法树进行反解析后,对应的子sql语句为:fromt3joint4ont3.c2=t4.c2或者fromt3,t4wheret3.c2=t4.c2。[0139]在一些实施例中,所述生成m个子sql语句之后,所述方法还包括:通过hive自带的sql编译功能对每个子sql语句进行语义检查;确定语义检查无误时,将所述m个子sql语句对应发送至m个边缘集群进行分片计算。[0140]采用上述技术方案,根据预设的统一映射关系,对中心集群下发的原始sql语句进行转换可自动生成匹配m个边缘集群的子sql语句,这样的转换过程无需人工干预,且转换标准统一,保证边缘集群获得的子sql语句的正确性,便于中心集群统计各个边缘集群的数据。[0141]实施例四[0142]为实现本技术实施例的方法,基于同一发明构思,本技术实施例中还提供了一种sql语句生成装置,图4为本技术实施例中sql语句生成装置组成的结构示意图。[0143]如图4所示,该sql语句生成装置具体包括:[0144]获取单元401,用于获取原始sql语句;其中,所述原始sql语句包括主表元数据;[0145]解析单元402,用于对所述原始sql语句进行解析,生成第一语法树;[0146]替换单元403,用于基于预设的主表元数据与m组子表元数据的映射关系,利用所述m组子表元数据分别对所述第一语法树中主表元数据进行替换,得到m个第二语法树;其中,m为正整数;[0147]反解析单元404,用于对所述m个第二语法树进行反解析,生成m个子sql语句。[0148]在一些实施例中,所述元数据包括表的表名和对应的至少一个列名;所述映射关系包括主表的表名和列名与子表的表名和列名的映射关系。[0149]在一些实施例中,所述装置包括:替换单元403,具体用于根据标识表名的第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的主表的表名;根据标识第一列名的第二关键字段查询所述第一语法树,确定所述第二关键字段所标识的主表的至少一个第一列名;其中,所述第一列名包括主表的列名;从所述映射关系中查找所述主表的表名对应的m组子表的表名,以及所述主表的第一列名对应的m组子表的第一列名;其中,所述第一列名包括子表的列名;利用m组子表的表名和第一列名分别对所述第一语法树中主表的表名和第一列名进行替换,得到所述m个第二语法树。[0150]在一些实施例中,所述装置包括:替换单元403,具体还用于若所述原始sql语句包括至少两个主表,根据所述第一关键字段查询所述第一语法树,确定所述第一关键字段所标识的所述至少两个主表的表名;根据标识第二列名的第三关键字段查询所述第一语法树,确定所述第三关键字段所标识的所述至少两个主表的第二列名;其中,所述第二列名包括主表的表名和列名;从所述映射关系中查找每个主表的表名对应的m组子表的表名,以及每个主表的第二列名对应的m组子表的第二列名;其中,所述第二列名包括子表的表名和列名;利用m组子表的表名和第二列名分别对所述第一语法树中每个主表的表名和第二列名进行替换,得到所述m个第二语法树。[0151]在一些实施例中,所述元数据还包括表的数据库名;所述映射关系还包括主表的数据库名与子表的数据库名的映射关系。[0152]在一些实施例中,所述装置包括:替换单元403,具体还用于根据所述第一关键字段查询所述第一语法树,确定每个主表对应的数据库名;从所述映射关系中查找每个主表的数据库名对应的m组子表的数据库名;利用m组子表的数据库名对所述第一语法树中每个主表的数据库名分别进行替换。[0153]在一些实施例中,所述生成m个子sql语句之后,通过hive自带的sql编译功能对每个子sql语句进行语义检查;确定语义检查无误时,将所述m个子sql语句对应发送至m个边缘集群进行分片计算。[0154]采用上述技术方案,根据预设的统一映射关系,对中心集群下发的原始sql语句进行转换可自动生成匹配m个边缘集群的子sql语句,这样的转换过程无需人工干预,且转换标准统一,保证边缘集群获得的子sql语句的正确性,便于中心集群统计各个边缘集群的数据。[0155]本技术实施例还提供了另一种sql语句生成设备,图5为本技术实施例中sql语句生成设备组成的结构示意图。如图5所示,该sql语句生成设备包括:处理器501和配置为存储能够在处理器上运行的计算机程序的存储器502;[0156]其中,处理器501配置为运行计算机程序时,执行前述实施例中的方法步骤。[0157]当然,实际应用时,如图5所示,该sql语句生成设备中的各个组件通过总线系统503耦合在一起。可理解,总线系统503用于实现这些组件之间的连接通信。总线系统503除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统503。[0158]在实际应用中,上述处理器可以为特定用途集成电路(asic,applicationspecificintegratedcircuit)、数字信号处理装置(dspd,digitalsignalprocessingdevice)、可编程逻辑装置(pld,programmablelogicdevice)、现场可编程门阵列(field-programmablegatearray,fpga)、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本技术实施例不作具体限定。[0159]上述存储器可以是易失性存储器(volatilememory),例如随机存取存储器(ram,random-accessmemory);或者非易失性存储器(non-volatilememory),例如只读存储器(rom,read-onlymemory),快闪存储器(flashmemory),硬盘(hdd,harddiskdrive)或固态硬盘(ssd,solid-statedrive);或者上述种类的存储器的组合,并向处理器提供指令和数据。[0160]在示例性实施例中,本技术实施例还提供了一种计算机可读存储介质,用于存储计算机程序。[0161]可选的,该计算机可读存储介质可应用于本技术实施例中的任意一种方法,并且该计算机程序使得计算机执行本技术实施例的各个方法中由处理器实现的相应流程,为了简洁,在此不再赘述。[0162]在本技术所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。[0163]上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。[0164]另外,在本发明各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0165]本技术所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。[0166]本技术所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。[0167]本技术所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。[0168]以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1