使用SQL实现MDX查询效果的方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种使用SQL实现MDX查询效果的方法和装置。
背景技术
随着数据库技术的发展和应用,数据库存储的数据量从20世纪80年代的兆(M)字节及千兆(G)字节过渡到现在的兆兆(T)字节和千兆兆(P)字节,同时,用户的查询需求也越来越复杂,涉及的已不仅是查询或操纵一张关系表中的一条或几条记录,而是要对多张表中千万条记录的数据进行数据分析和信息综合。为了支持复杂的数据分析和信息综合操作,目前专门设计了一种OLAP(On-Line Transaction Processing,联机分析处理)系统。OLAP系统可以根据决策人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观而易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业(公司)的经营状况,了解对象的需求,制定正确的方案。
现有OLAP系统主要通过MDX(Multi Dimensional Expressions,多维表达式)语句实现,具体过程如下:获取预设数据查询条件参数,利用预设数据查询条件参数,按照预设MDX语法,生成MDX查询语句;将MDX查询语句提交至OLAP服务器,通过OLAP服务器解析执行MDX查询语句生成OLAP数据集(也可以称为cube(多维)数据集,是各个维度组合下的度量数据,直观而易懂),将OLAP数据集展示给用户。
现有OLAP系统主要通过MDX语句实现,编程人员需要学习MDX语法,不能重复使用已经掌握的SQL(Structured Query Language,结构化查询语言)语法,浪费时间;需要专门的OLAP服务器来解析执行MDX语句,部署OLAP服务器的成本和运维比较高。
发明内容
为了解决现有技术的问题,本发明提供了一种使用SQL实现MDX查询效果的方法和装置,通过SQL Hint对SQL进行扩展,在不影响SQL原有功能的前提下,实现多维分析查询,达到类似MDX的查询效果,不需要学习MDX语法,可以节约时间;可以在RDBMS数据库或支持SQL的DW数据库中查询读取数据后,根据SQL Hint实现MDX的效果,不需要部署OLAP服务器,可以节约成本。
为了解决上述问题,本发明公开了一种使用SQL实现MDX查询效果的方法,所述方法包括:
获取预设数据查询条件参数,利用所述预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句;
解析所述SQL查询语句,得到所述SQL查询语句中每个SQL字符串的含义;
根据所述SQL查询语句中每个SQL字符串的含义,将所述SQL查询语句中预设子句的代码片段转换为支持SQL的代码片段,并且收集所述SQL查询语句中所述SQL Hint对应的多维查询元数据;
在RDBMS数据库或支持SQL的DW数据库中执行所述SQL查询语句,得到SQL数据集;
根据所述SQL Hint对应的多维查询元数据,将所述SQL数据集组织构建为OLAP数据集。
进一步地,根据所述SQL查询语句中每个SQL字符串的含义,将所述SQL查询语句中预设子句的代码片段转换为支持SQL的代码片段,并且收集所述SQL查询语句中所述SQL Hint对应的多维查询元数据,包括:
根据所述SQL查询语句中每个SQL字符串的含义,分析所述SQL查询语句中SELECT子句、FROM子句、GROUP子句的选择条件、维表名,重新组织所述SELECT子句和所述GROUP子句的代码片段为支持SQL的代码片段;
收集并保存所述SELECT子句中的所述SQL Hint对应的多维查询元数据。
进一步地,收集并保存所述SELECT子句中的所述SQL Hint对应的多维查询元数据之后,在RDBMS数据库或支持SQL的DW数据库中执行所述SQL查询语句之前,还包括:
判断当前用户是否有查询权限;
如果所述当前用户有查询权限,则执行在RDBMS数据库或支持SQL的DW数据库中执行所述SQL查询语句的步骤。
进一步地,根据所述SQL Hint对应的多维查询元数据,将所述SQL数据集组织构建为OLAP数据集,包括:
获取所述SQL Hint对应的多维查询元数据中的自定义函数;
根据所述多维查询元数据中的自定义函数,对所述SQL数据集进行自定义处理;
获取所述SQL Hint对应的多维查询元数据中的维轴配置信息;
根据所述维轴配置信息,将自定义处理后的所述SQL数据集的行数据按照轴进行组织构建得到所述OLAP数据集。
进一步地,所述预设OLAP SQL语法为:通过所述SQL Hint对SQL进行扩展。
进一步地,所述SQL Hint包括:自定义函数func和/或自定义关键词;
所述自定义函数至少包括下面一种:钻取函数、数据格式化函数、数据计算函数、日期统计函数和开窗函数;
所述自定义关键词至少包括下面一种:轴维度关键词、轴交换关键词、衍生维度关键词和衍生度量关键词。
为了解决上述问题,本发明还公开了一种使用SQL实现MDX查询效果的装置,所述装置包括:
获取模块,用于获取预设数据查询条件参数,利用所述预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句;
解析模块,用于解析所述SQL查询语句,得到所述SQL查询语句中每个SQL字符串的含义;
处理模块,用于根据所述SQL查询语句中每个SQL字符串的含义,将所述SQL查询语句中预设子句的代码片段转换为支持SQL的代码片段,并且收集所述SQL查询语句中所述SQL Hint对应的多维查询元数据;
执行模块,用于在RDBMS数据库或支持SQL的DW数据库中执行所述SQL查询语句,得到SQL数据集;
构建模块,用于根据所述SQL Hint对应的多维查询元数据,将所述SQL数据集组织构建为OLAP数据集。
进一步地,所述处理模块包括:
第一处理单元,用于根据所述SQL查询语句中每个SQL字符串的含义,分析所述SQL查询语句中SELECT子句、FROM子句、GROUP子句的选择条件、维表名,重新组织所述SELECT子句和所述GROUP子句的代码片段为支持SQL的代码片段;
第二处理单元,用于收集并保存所述SELECT子句中的所述SQL Hint对应的多维查询元数据。
进一步地,所述处理模块还包括:
判断单元,用于所述第二处理单元收集并保存所述SELECT子句中的所述SQL Hint对应的多维查询元数据之后,判断当前用户是否有查询权限;
通知单元,用于如果所述当前用户有查询权限,则通知所述执行模块执行在RDBMS数据库或支持SQL的DW数据库中执行所述SQL查询语句的步骤。
进一步地,所述构建模块包括:
第一获取单元,用于获取所述SQL Hint对应的多维查询元数据中的自定义函数;
自定义处理单元,用于根据所述多维查询元数据中的自定义函数,对所述SQL数据集进行自定义处理;
第二获取单元,用于获取所述SQL Hint对应的多维查询元数据中的维轴配置信息;
构建单元,用于根据所述维轴配置信息,将自定义处理后的所述SQL数据集的行数据按照轴进行组织构建得到所述OLAP数据集。
进一步地,所述预设OLAP SQL语法为:通过所述SQL Hint对SQL进行扩展。
进一步地,所述SQL Hint包括:自定义函数func和/或自定义关键词;
所述自定义函数至少包括下面一种:钻取函数、数据格式化函数、数据计算函数、日期统计函数和开窗函数;
所述自定义关键词至少包括下面一种:轴维度关键词、轴交换关键词、衍生维度关键词和衍生度量关键词。
与现有技术相比,本发明可以获得包括以下技术效果:
通过SQL Hint对SQL进行扩展,在不影响SQL原有功能的前提下,实现多维分析查询,达到类似MDX的查询效果,不需要学习MDX语法,可以节约时间;可以在RDBMS数据库或支持SQL的DW数据库中查询读取数据后,根据SQL Hint实现MDX的效果,不需要部署OLAP服务器,可以节约成本。
当然,实施本发明的任一产品必不一定需要同时达到以上所述的所有技术效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的第一种使用SQL实现MDX查询效果的方法流程图;
图2是本发明实施例的第二种使用SQL实现MDX查询效果的方法流程图;
图3是本发明实施例的第三种使用SQL实现MDX查询效果的方法流程图;
图4是本发明实施例的第一种使用SQL实现MDX查询效果的装置结构示意图。
具体实施方式
以下将配合附图及实施例来详细说明本发明的实施方式,藉此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
实施例描述
下面以一实施例对本发明方法的实现作进一步说明。如图1所示,为本发明实施例的一种使用SQL实现MDX查询效果的方法流程图,该方法包括:
S101:获取预设数据查询条件参数,利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint(提示)的SQL查询语句。
具体地,获取预设数据查询条件参数可以是本地应用系统通过查询网络页面上预设查询入口获取用户在需要查询时输入的预设数据查询条件参数,相应地,利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句可以是本地系统利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句。获取预设数据查询条件参数也可以是咨询用户需求,根据用户需求设置查询条件参数,相应地,利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句可以是用户利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句,将携带SQL Hint的SQL查询语句直接输入本地应用系统。
其中,预设OLAP SQL语法为:通过SQL Hint对SQL进行扩展。
其中,SQL Hint包括:自定义函数func和/或自定义关键词;
自定义函数至少包括下面一种:钻取函数、数据格式化函数、数据计算函数、日期统计函数和开窗函数;
自定义关键词至少包括下面一种:轴维度关键词、轴交换关键词、衍生维度关键词和衍生度量关键词。
其中,SQL hint的数据可以是json5(JavaScript Object Notation,脚本对象集合)格式的数据配置,SQL hint的自定义关键词至少包括下面的几种:
rotate:对查询结果进行旋转操作(轴交换操作:轴1和轴2的结果互相交换位置)。
axis:查询的结果所在的轴,类似于MDX的on关键字。
func:为了实现多维查询,需要支持的函数,RDBMS不一定支持。
derive:衍生字段,由其他列的数据计算、汇总之后生成的新字段。
alias:衍生字段的别名,类似SQL as关键字。
S102:解析SQL查询语句,得到SQL查询语句中每个SQL字符串的含义。
“select year/*axis:column*/,order_amount/*axis:row,func:chinseExpr*/from order”SQL查询语句被解析为:
select:keyword,sql关键字;year:标识字符;/*axis:column,func:chineseExpr*/:sql hint,sql语句增强,而且此增强属于year字段;order_amount:标识字符;/*axis:row*/:sql hint,sql语句增强,而且此增强是属于order_amount字段;from:keyword,sql关键字;order:标识符字段,被识别为数据库表名称。
S103:根据SQL查询语句中每个SQL字符串的含义,将SQL查询语句中预设子句的代码片段转换为支持SQL的代码片段,并且收集SQL查询语句中SQL Hint对应的多维查询元数据。
具体地,根据SQL查询语句中每个SQL字符串的含义,分析SQL查询语句中SELECT子句、FROM子句、GROUP子句的选择条件、维表名,重新组织SELECT子句和GROUP子句的代码片段为支持SQL的代码片段;
收集并保存SELECT子句中的SQL Hint对应的多维查询元数据。
S104:在RDBMS(Relational Database Management System,关系数据库管理系统)数据库或支持SQL的DW(Data Warehouse,数据仓库)数据库中执行SQL查询语句,得到SQL数据集。
具体地,通过JDBC(Java Data Base Connectivity,java数据库连接)与RDBMS数据库或支持SQL的DW数据库建立连接,在RDBMS数据库或支持SQL的DW数据库中执行SQL查询语句,得到SQL数据集。
S105:根据SQL Hint对应的多维查询元数据,将SQL数据集组织构建为OLAP数据集。
具体地,将SQL数据集组织构建为OLAP数据集,将OLAP数据集(多维结果)显示在二维空间上展示给用户。
具体地,参见图2,根据SQL Hint对应的多维查询元数据,将SQL数据集组织构建为OLAP数据集,包括:
S105a:获取SQL Hint对应的多维查询元数据中的自定义函数。
S105b:根据自定义函数,对SQL数据集进行自定义处理。
例如:自定义函数为:func:chineseExpr。func:chineseExpr是用来对year进行格式化,则将SQL数据集中相关数据转换为'xxxx年'这种中文格式。
S105c:获取SQL Hint对应的多维查询元数据中的维轴配置信息。
S105d:根据维轴配置信息,将自定义处理后的SQL数据集的行数据按照轴进行组织构建得到OLAP数据集。
例如:根据rotate的维轴配置信息,将每个字段的值相应的放在行轴或者列轴。
具体地,参见图3,收集并保存SELECT子句中的SQL Hint对应的多维查询元数据之后,在RDBMS数据库或支持SQL的DW数据库中执行SQL查询语句之前,还包括:
S106:判断当前用户是否有查询权限,如果当前用户有查询权限,则执行S104;如果当前用户有查询权限,则结束。
具体地,判断当前用户是否有查询权限时,可以是:
判断当前用户是否有权限访问SELECT子句的数据和是否有权限访问WHERE条件过滤后的数据;
如果有权限访问SELECT子句的数据且有权限访问WHERE条件过滤后的数据,则确定当前用户有查询权限;如果没有权限访问SELECT子句的数据或没有权限访问WHERE条件过滤后的数据,则确定当前用户没有查询权限。
并且,如果用户有权限访问SELECT子句的数据,但是不能访问SELECT子句的全部数据,则可以对SQL查询语句做进一步的封装,例如:当前用户不能访问order_mout值大于10000的数据,则可以在SQL查询语句中新增过滤条件:from order where order_amount<10000。其他需要限制访问数据多少的地方与此类似。
本实施例所述的使用SQL实现MDX查询效果的方法,通过SQL Hint对SQL进行扩展,在不影响SQL原有功能的前提下,实现多维分析查询,达到类似MDX的查询效果,不需要学习MDX语法,可以节约时间;可以在RDBMS数据库或支持SQL的DW数据库中查询读取数据后,根据SQLHint实现MDX的效果,不需要部署OLAP服务器,可以节约成本。
为了便于理解,下面举例进行进一步说明:
例如:一个比较简单的场景,查询各个区域每年订单总数。使用传统SQL查询语句,查询结果如表1所示。
表1
按照本实施例的方法,得到的携带SQL Hint的SQL查询语句如下:
使用携带SQL Hint的SQL查询语句,查询结果如表2所示。
表2
|
2009 |
2010 |
2011 |
2012 |
area |
订单数量 |
订单数量 |
订单数量 |
订单数量 |
东北 |
304 |
299 |
318 |
289 |
华北 |
429 |
419 |
395 |
417 |
华东 |
401 |
412 |
353 |
379 |
华南 |
805 |
801 |
747 |
888 |
西北 |
170 |
170 |
178 |
144 |
西南 |
81 |
71 |
48 |
50 |
如图4所示,是本发明实施例的一种使用SQL实现MDX查询效果的装置结构图,该装置包括:
获取模块201,用于获取预设数据查询条件参数,利用预设数据查询条件参数,按照预设OLAP SQL语法,生成携带SQL Hint的SQL查询语句;
解析模块202,用于解析SQL查询语句,得到SQL查询语句中每个SQL字符串的含义;
处理模块203,用于根据SQL查询语句中每个SQL字符串的含义,将SQL查询语句中预设子句的代码片段转换为支持SQL的代码片段,并且收集SQL查询语句中SQL Hint对应的多维查询元数据;
执行模块204,用于在RDBMS数据库或支持SQL的DW数据库中执行SQL查询语句,得到SQL数据集;
构建模块205,用于根据SQL Hint对应的多维查询元数据,将SQL数据集组织构建为OLAP数据集。
进一步地,处理模块203包括:
第一处理单元,用于根据SQL查询语句中每个SQL字符串的含义,分析SQL查询语句中SELECT子句、FROM子句、GROUP子句的选择条件、维表名,重新组织SELECT子句和GROUP子句的代码片段为支持SQL的代码片段;
第二处理单元,用于收集并保存SELECT子句中的SQL Hint对应的多维查询元数据。
进一步地,处理模块203还包括:
判断单元,用于第二处理单元收集并保存SELECT子句中的SQL Hint对应的多维查询元数据之后,判断当前用户是否有查询权限;
通知单元,用于如果当前用户有查询权限,则通知执行模块204执行在RDBMS数据库或支持SQL的DW数据库中执行SQL查询语句的步骤。
进一步地,构建模块205包括:
第一获取单元,用于获取SQL Hint对应的多维查询元数据中的自定义函数;
自定义处理单元,用于根据多维查询元数据中的自定义函数,对SQL数据集进行自定义处理;
第二获取单元,用于获取SQL Hint对应的多维查询元数据中的维轴配置信息;
构建单元,用于根据维轴配置信息,将自定义处理后的SQL数据集的行数据按照轴进行组织构建得到OLAP数据集。
进一步地,预设OLAP SQL语法为:通过SQL Hint对SQL进行扩展。
进一步地,SQL Hint包括:自定义函数func和/或自定义关键词;
自定义函数至少包括下面一种:钻取函数、数据格式化函数、数据计算函数、日期统计函数和开窗函数;
自定义关键词至少包括下面一种:轴维度关键词、轴交换关键词、衍生维度关键词和衍生度量关键词。
本实施例所述的使用SQL实现MDX查询效果的装置,通过SQL Hint对SQL进行扩展,在不影响SQL原有功能的前提下,实现多维分析查询,达到类似MDX的查询效果,不需要学习MDX语法,可以节约时间;可以在RDBMS数据库或支持SQL的DW数据库中查询读取数据后,根据SQLHint实现MDX的效果,不需要部署OLAP服务器,可以节约成本。
所述装置与前述的方法流程描述对应,不足之处参考上述方法流程的叙述,不再一一赘述。
上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。