基于SQL生成器的报表查询方法和系统与流程

文档序号:29414727发布日期:2022-03-26 12:46阅读:261来源:国知局
基于SQL生成器的报表查询方法和系统与流程
基于sql生成器的报表查询方法和系统
技术领域
1.本发明主要涉及数据处理领域,尤其涉及一种基于sql生成器的报表查询方法。


背景技术:

2.用户在使用自定义报表系统查询报表时,用户可能在查询时会动态添加筛选器,或者更改查询数据的维度,系统后台也会根据当前用户权限信息动态改变sql语句来实现数据权限的限制。如果用户在创建报表时后台就根据用户选择的维度以及度量信息生成好查询sql,则在查询时后台需要解析sql,然后再对sql语句进行修改,修改完成后再进行查询,过程复杂又耗时。


技术实现要素:

3.本发明要解决的技术问题是提供一种基于sql生成器的报表查询方法和系统,可以提升报表系统查询性能,降低报表查询的出错率。
4.为解决上述技术问题,本发明提供了一种基于sql生成器的报表查询方法,所述sql生成器适于生成sql语句,其特征在于,包括如下步骤:
5.通过所述sql生成器接收并解析来自用户端的报表查询请求,并获取所述报表查询请求中的元数据信息;
6.通过所述sql生成器基于所述元数据信息生成一条或多条sql语句;以及
7.根据所述一条或多条sql语句执行所述报表查询请求。
8.在本发明的一实施例中,所述sql生成器中具有报表中的属性字段,所述元数据信息为所述报表查询请求所对应的报表中的属性字段的属性值。
9.在本发明的一实施例中,所述属性字段包括维度字段、度量字段、筛选器字段、排序字段和/或分页字段。
10.在本发明的一实施例中,所述sql生成器为基于预设编程语言的查询模型。
11.在本发明的一实施例中,所述预设编程语言包括java语言,python语言,scala语言和/或go语言。
12.在本发明的一实施例中,在生成一条或多条sql语句之前,还包括通过所述sql生成器基于所述元数据信息对所述查询模型实例化。
13.在本发明的一实施例中,还包括在执行所述报表查询请求之后,返回查询结果至所述用户端并生成查询后的报表。
14.本发明的另一方面还提出了一种基于sql生成器的报表查询系统,包括:
15.sql生成器,配置为接收并解析来自用户端的报表查询请求,以获取所述报表查询请求中的元数据信息,并基于所述元数据信息生成一条或多条sql语句;以及
16.sql执行引擎,配置为根据所述一条或多条sql语句执行所述报表查询请求。
17.为了解决上述的问题,本发明还提出了一种基于sql生成器的报表查询系统,包括:
18.存储器,用于存储可由处理器执行的指令;以及处理器,用于执行所述指令以实现上述基于sql生成器的报表查询方法。
19.本发明的另一方面还提出了一种存储有计算机程序代码的计算机可读介质,所述计算机程序代码在由处理器执行时实现基于sql生成器的报表查询方法。
20.与现有技术相比,本发明具有以下优点:
21.本发明就是通过在代码层定义生成sql语句的sql生成器,从而在创建报表时不生成sql语句,而在报表查询时再根据sql生成器动态地生成查询sql语句,由此避免了每次执行报表查询的请求时均需要修改sql语句的工作量和复杂度,同时也加快了报表查询的整体效率,也降低了出错率。
附图说明
22.包括附图是为提供对本技术进一步的理解,它们被收录并构成本技术的一部分,附图示出了本技术的实施例,并与本说明书一起起到解释本发明原理的作用。附图中:
23.图1是本发明一实施例的一种基于sql生成器的报表查询方法的流程示意图;
24.图2是本发明一实施例的一种基于sql生成器的报表查询系统的系统框图;以及
25.图3是本发明另外一实施例的一种基于sql生成器的报表查询系统的系统框图。
具体实施方式
26.为了更清楚地说明本技术的实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本技术的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本技术应用于其他类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
27.如本技术和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
28.除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本技术的范围。同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
29.在本技术的描述中,需要理解的是,方位词如“前、后、上、下、左、右”、“横向、竖向、垂直、水平”和“顶、底”等所指示的方位或位置关系通常是基于附图所示的方位或位置关系,仅是为了便于描述本技术和简化描述,在未作相反说明的情况下,这些方位词并不指示和暗示所指的装置或元件必须具有特定的方位或者以特定的方位构造和操作,因此不能理
解为对本技术保护范围的限制;方位词“内、外”是指相对于各部件本身的轮廓的内外。
30.为了便于描述,在这里可以使用空间相对术语,如“在
……
之上”、“在
……
上方”、“在
……
上表面”、“上面的”等,用来描述如在图中所示的一个器件或特征与其他器件或特征的空间位置关系。应当理解的是,空间相对术语旨在包含除了器件在图中所描述的方位之外的在使用或操作中的不同方位。例如,如果附图中的器件被倒置,则描述为“在其他器件或构造上方”或“在其他器件或构造之上”的器件之后将被定位为“在其他器件或构造下方”或“在其他器件或构造之下”。因而,示例性术语“在
……
上方”可以包括“在
……
上方”和“在
……
下方”两种方位。该器件也可以其他不同方式定位(旋转90度或处于其他方位),并且对这里所使用的空间相对描述作出相应解释。
31.此外,需要说明的是,使用“第一”、“第二”等词语来限定零部件,仅仅是为了便于对相应零部件进行区别,如没有另行声明,上述词语并没有特殊含义,因此不能理解为对本技术保护范围的限制。此外,尽管本技术中所使用的术语是从公知公用的术语中选择的,但是本技术说明书中所提及的一些术语可能是申请人按他或她的判断来选择的,其详细含义在本文的描述的相关部分中说明。此外,要求不仅仅通过所使用的实际术语,而是还要通过每个术语所蕴含的意义来理解本技术。
32.应当理解,当一个部件被称为“在另一个部件上”、“连接到另一个部件”、“耦合于另一个部件”或“接触另一个部件”时,它可以直接在该另一个部件之上、连接于或耦合于、或接触该另一个部件,或者可以存在插入部件。相比之下,当一个部件被称为“直接在另一个部件上”、“直接连接于”、“直接耦合于”或“直接接触”另一个部件时,不存在插入部件。同样的,当第一个部件被称为“电接触”或“电耦合于”第二个部件,在该第一部件和该第二部件之间存在允许电流流动的电路径。该电路径可以包括电容器、耦合的电感器和/或允许电流流动的其它部件,甚至在导电部件之间没有直接接触。
33.本发明的一实施例提出了一种基于sql生成器的报表查询方法,可以提升报表系统查询性能,降低报表查询的出错率
34.如图1所示,是该实施例中一种基于sql生成器的报表查询方法(以下简称“查询方法10”)的流程示意图。本技术中图1使用了流程图用来说明根据本技术的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各种步骤。同时,或将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
35.根据图1,查询方法10包括如下的步骤。
36.步骤11为配置sql生成器。该sql生成器适于动态地生成sql语句。在本发明的包括图1所示的一些实施例中,步骤12中的sql生成器为基于预设编程语言的查询模型。示例性的,预设编程语言包括java语言,python语言,scala语言和/或go语言。
37.步骤12为通过sql生成器接收并解析来自用户端的报表查询请求,并获取报表查询请求中的元数据信息。
38.示例性的,在本发明包括图1的一些实施例中,上述步骤11中涉及的sql生成器中包括通常的报表中所具有的属性字段,这些报表被查询时,查询请求中包含了属性字段的具体的属性值,也即上述步骤12中所提到的元数据信息。通过元数据信息(各个属性字段的属性值)为sql生成器中的属性字段赋值,即可以生成对应于每一个报表查询请求的sql语
句。
39.具体的,在本发明的一些实施例中,属性字段包括维度字段、度量字段、筛选器字段、排序字段和/或分页字段。
40.举例来说,维度字段和度量字段与用户端发出的报表查询请求的实质内容密切相关。例如,用户想要查看神经系统领域的项目占比情况,那么神经系统领域代表的就是维度,项目占比代表的就是度量。进一步的,筛选器字段可以是用户要筛选的条件,例如,用户想要查看申办方为某医院的相关项目的一些指标信息,则申办方的名称由筛选器字段表示。排序字段通常对应用户想要以怎样的顺序查看数据。比如,用户想要根据项目编号排序查看各个项目的详细信息,则项目编号可以作为其中一个排序字段。最后,分页字段可以对应报表查询请求中用户想要一次性查看数据的数量。比如,用户想看每页只显示十条项目信息并将这样对设定包含在报表查询请求中,则每页显示十条项目信息就是对应的分页信息。
41.可以看出的是,本发明的方案是特别地面向普通使用者(而非需要知晓数据库底层逻辑的技术人员)所在的用户端的,采用了本发明的方案,普通用户只需要在用户端通过简单的设置和输入,则可以将上述的如维度字段、度量字段、筛选器字段、排序字段和/或分页字段的属性字段的具体属性值作为元数据信息包含在报表查询请求中,从而供sql生成器接收、解析以及提取,并进一步执行后面的操作。
42.进一步的,步骤13为通过sql生成器基于元数据信息生成一条或多条sql语句。
43.示例性的,如上所述,在本发明包括图1的一些实施例中,sql生成器是基于预设编程语言的查询模型。在这样的实施例中,本发明的基于sql生成器的报表查询方法中,还包括以元数据信息作为输入而对这样的查询模型进行参数实例化,从而动态地生成一条或多条sql语句,这些sql语句当然地对应不同的来自用户端的报表查询请求。将sql生成器配置为基于预设编程语言的查询模型,可以方便的通过在查询模型中对参数实例化,从而方便快捷的获得基于元数据信息的一条或多条sql语句。
44.最后,步骤14为根据一条或多条sql语句执行报表查询请求。具体的,此步骤是在数据库中由sql执行引擎完成的操作。示例性的,数据库的类型可以是关系型数据库,或者是支持sql查询请求的数据库等,本发明不对此做出限制。
45.进一步示例性的,在本发明的包括图1所示的一些实施例中,在执行完上述步骤13完成执行报表查询请求之后,还包括返回查询结果至用户端并生成查询后的报表的步骤。从而在用户端可以直接渲染得到需要查询到查询结果,进一步提升报表系统的查询功能,提升用户体验。
46.如图2所示,本发明的另一方面还提出了一种基于sql生成器的报表查询系统20(以下简称“查询系统20”)。查询系统20主要包括sql生成器21和sql执行引擎22。
47.具体的sql生成器21配置为接收并解析来自用户端的报表查询请求,以获取报表查询请求中的元数据信息,并基于元数据信息生成一条或多条sql语句。sql执行引擎22配置为根据一条或多条sql语句执行报表查询请求。
48.示例性的,查询系统20可以使用上述参照图1说明的查询方法10,更多的关于查询系统20的细节可以参考上述参照图1说明的查询方法10,在此不再赘述。
49.在现有技术中,通常方案是在创建报表的时候在数据库中已生成好各个报表对应
的sql语句。当用户在使用时发出较为复杂的报表请求时,后台要根据用户选择的筛选器以及查询维度信息等信息,解析sql,然后操作sql抽象语法树去改变sql内容。示例性的,现有技术的一些手段为在获取报表查询的请求后,先将sql解析成抽象语法树,再更改抽象语法树,将筛选条件等信息加入到抽象语法树中,根据修改后的抽象语法树生成sql语句,最终在数据库中查询sql语句以完成用户的查询请求。这样的方式较为繁琐耗时,每一次收到用户请求后均需要完整经历一次解析、更改语法树、更改sql语句内容的流程,不仅工作量大,还容易出错。
50.另外,在现有技术中,也存在提前设置多个目标的sql模型,并根据每一次用户端的报表查询请求而在多个目标的sql模型中匹配出相应的模型,从而完成请求的方案。这样的方式虽然在一定程度上解决了传统的sql查询耗时且易出错的缺陷,但是仍然由于其无法枚举出全部的目标sql模型而具有一定的局限性。并且,这样的方式对于用户端的操作人员的技术要求较高,操作人员需要熟知每一种sql模型的特点才可以在每次执行sql查询时准确的识别并找出匹配的sql模型,并不利于在普通用户的群体中进行拓展和使用。
51.而相比之下,本发明具体针对报表查询的场景,通过一种通用的sql生成器根据来自用户端的查询请求中所提取的元数据信息动态地生成对应的sql语句。如上所述,sql生成器可以接收并解析所有报表中重要的属性字段(维度、度量、筛选器、排序字段、分页信息等等)。这种实现方式对上层使用者(也即普通用户)是透明的,上层使用者无需关注底层(也即数据库)的实现逻辑。在报表的界面,用户仅需要按照原有方式在界面执行拖拉拽等简单的操作,sql生成器会根据用户拖拉拽操作所产生的报表查询请求中的所提取的维度、度量、筛选器等信息来自动生成sql查询语句。如果用户在查询报表时改变维度、度量、筛选器等信息(比如:报表的下钻场景是改变维度的,添加筛选条件的场景是改变筛选器的等等),sql生成器只需要识别这些变动的值便可以持续动态地生成对应的sql语句以完成查询。从而实现灵活的应对用户在使用报表的后期对维度、度量、筛选器等变更,大幅度提升报表的查询性能,降低出错率,提升用户查询报表的体验。
52.可以理解的是,当今在各行各业都在推进企业数字化转型背景下,用户对于报表查询的需求趋向于复杂以及综合。普通用户在查询报表时一般是希望查询报表的速度够快,可以非常灵活的通过条件进行筛选查看(包括下钻查询,即切换维度查看报表中的指标),以及可以非常灵活的对报表内容进行修改(新增一些指标或者删除一些不关注的指标)。本发明的上述参照图1和图2说明的基于sql生成器的报表查询方法和系统通过配置可以动态生成sql语句的sql生成器有效地解决了这个问题。具体的,通过sql生成器,大大简化了报表的查询链路复杂度,使得报表查询速度成倍提升。通过sql生成器解析报表查询请求中的筛选器字段,并根据该元数据信息生成相应的sql语句,可以非常灵活的支持用户的条件查询。通过sql生成器解析报表查询请求中的维度字段,并根据此项元数据信息生成相应的sql语句,可以非常灵活的支持用户维度切换查询(如下钻查询)。总的来说,通过本方案中的sql生成器,可以为客户端的普通用户的任一复杂和综合的报表查询请求提供支持,具有很好的技术效果。
53.本发明的一实施例还提出了一种如图3所示的基于sql生成器的报表查询系统30。根据图3,基于sql生成器的报表查询系统30可包括内部通信总线31、处理器(processor)32、只读存储器(rom)33、随机存取存储器(ram)34、以及通信端口35。当应用在个人计算机
上时,基于sql生成器的报表查询系统30还可以包括硬盘36。
54.内部通信总线31可以实现基于sql生成器的报表查询系统30组件间的数据通信。处理器32可以进行判断和发出提示。在一些实施例中,处理器32可以由一个或多个处理器组成。通信端口35可以实现基于sql生成器的报表查询系统30与外部的数据通信。在一些实施例中,基于sql生成器的报表查询系统30可以通过通信端口35从网络发送和接受信息以及数据。
55.基于sql生成器的报表查询系统30还可以包括不同形式的程序储存单元以及数据储存单元,例如硬盘36,只读存储器(rom)33和随机存取存储器(ram)34,能够存储计算机处理和/或通信使用的各种数据文件,以及处理器32所执行的可能的程序指令。处理器执行这些指令以实现方法的主要部分。处理器处理的结果通过通信端口传给用户设备,在用户界面上显示。
56.除此之外,本发明另一方面还提出了一种存储有计算机程序代码的计算机可读介质,计算机程序代码在由处理器执行时实现上述的基于sql生成器的报表查询方法。
57.上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述发明披露仅仅作为示例,而并不构成对本技术的限定。虽然此处并没有明确说明,本领域技术人员可能会对本技术进行各种修改、改进和修正。该类修改、改进和修正在本技术中被建议,所以该类修改、改进、修正仍属于本技术示范实施例的精神和范围。
58.同时,本技术使用了特定词语来描述本技术的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本技术至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本技术的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
59.本技术的一些方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。处理器可以是一个或多个专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理器件(dapd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、处理器、控制器、微控制器、微处理器或者其组合。此外,本技术的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。例如,计算机可读介质可包括,但不限于,磁性存储设备(例如,硬盘、软盘、磁带
……
)、光盘(例如,压缩盘cd、数字多功能盘dvd
……
)、智能卡以及闪存设备(例如,卡、棒、键驱动器
……
)。
60.计算机可读介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等等、或合适的组合形式。计算机可读介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机可读介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、射频信号、或类似介质、或任何上述介质的组合。
61.同理,应当注意的是,为了简化本技术披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本技术实施例的描述中,有时会将多种特征归并至一个实施例、附图或
对其的描述中。但是,这种披露方法并不意味着本技术对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
62.一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有
±
20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本技术一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
63.虽然本技术已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本技术,在没有脱离本技术精神的情况下还可作出各种等效的变化或替换,因此,只要在本技术的实质精神范围内对上述实施例的变化、变型都将落在本技术的权利要求书的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1