CN113792067B - 一种基于递归算法的sql自动生成系统与方法 - Google Patents
一种基于递归算法的sql自动生成系统与方法 Download PDFInfo
- Publication number
- CN113792067B CN113792067B CN202111352343.0A CN202111352343A CN113792067B CN 113792067 B CN113792067 B CN 113792067B CN 202111352343 A CN202111352343 A CN 202111352343A CN 113792067 B CN113792067 B CN 113792067B
- Authority
- CN
- China
- Prior art keywords
- stage
- component
- sql
- data
- dag
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000007405 data analysis Methods 0.000 claims abstract description 35
- 238000012800 visualization Methods 0.000 claims abstract description 12
- 238000012545 processing Methods 0.000 claims abstract description 8
- 238000005520 cutting process Methods 0.000 claims description 25
- 238000011144 upstream manufacturing Methods 0.000 claims description 19
- 238000001914 filtration Methods 0.000 claims description 14
- 230000000007 visual effect Effects 0.000 claims description 14
- 230000002776 aggregation Effects 0.000 claims description 12
- 238000004220 aggregation Methods 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 11
- 238000010586 diagram Methods 0.000 claims description 7
- 238000003825 pressing Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 6
- 230000000712 assembly Effects 0.000 claims description 2
- 238000000429 assembly Methods 0.000 claims description 2
- 230000009191 jumping Effects 0.000 claims description 2
- 238000013507 mapping Methods 0.000 claims description 2
- 238000004458 analytical method Methods 0.000 claims 1
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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/242—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据处理技术领域,具体涉及一种基于递归算法的SQL自动生成系统与方法。该统包括数据分析可视化DAG子系统和SQL自动生成子系统;所述数据分析可视化DAG子系统用于提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据,所述SQL自动生成子系统用于将Json数据解析为实际可执行的SQL语句。本发明能够以图形化拖拉拽的方式创建DAG图,并将DAG图转换为特定格式的Json数据,将DAG图解析为实际可执行的SQL语句,降低了SQL语句生成及汇总的复杂程度,可以支持生成各种复杂SQL语句,避免了手动书写出错的问题,提高了工作效率,使数据的准确性得到很高的提升。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种基于递归算法的SQL自动生成系统与方法。
背景技术
随着科技的不断进步以及信息化的进程加快,大数据的应用日益广泛,大数据与各类应用越来越密不可分,大数据离不开各类数据库和SQL语言的支撑,数据库的应用也随之越来越普遍。而SQL为结构化查询语言,是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL作为高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
但是,在大数据的应用中,为了满足汇总数据需求,在应用系统开发的过程中需要定制大量的汇总任务来完成该工作,传统的方式是通过手动写SQL语句来完成该工作,但是手动书写往往存在大量的弊端,如笔误就会导致不能正常执行;对于没有一定专业知识储备的人员来说完成手动书写汇总任务非常困难。但是,目前缺乏自动汇总任务定制方法,无法将其使用在SQL语句生成上,导致手动书写费时费力,存在较多弊端,无法通过图形化生成各种复杂SQL语句。
发明内容
为解决现有技术中不支持图形化生成各种复杂SQL语句的问题。本发明提供了一种基于递归算法的SQL自动生成系统与方法。
本发明采用以下技术方案实现:
一种基于递归算法的SQL自动生成系统,包括数据分析可视化DAG(DirectedAcyclic Graph,即有向无环图)子系统和SQL(结构化查询语言,是用于访问和处理数据库的标准的计算机语言)自动生成子系统;
所述数据分析可视化DAG子系统,包含基于JDBC的多数据源元数据服务模块、组件化拖拉拽服务模块以及DAG图Json转换服务模块,所述数据分析可视化DAG子系统用于提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据;
所述SQL自动生成子系统用于将Json数据解析为实际可执行的SQL语句,所述SQL自动生成子系统包括Stage动态切割模块以及基于递归算法的SQL自动生成模块。
作为本发明的进一步方案,所述基于JDBC的多数据源元数据服务模块通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,所述基于JDBC的多数据源元数据服务模块的服务内容包括:查询数据库实例列表、查询Table列表以及查询Table字段信息,所述基于JDBC的多数据源元数据服务模块中的元数据查询服务用于给DAG图绘制提供必要的元数据信息。
优选的,所述组件化拖拉拽服务模块用于提供一个通用的可视化界面,通过所述可视化界面以及元数据服务,通过拖拉拽的方式生成用于数据分析的DAG图;所述组件化拖拉拽服务模块的服务功能包括:提供用于数据分析的拖拉拽组件,展示数据库实例列表以及展示Table列表。
其中,所述拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
优选的,所述DAG图Json转换服务模块用于可动态地在可视化界面中,通过所述拖拉拽组件生成的DAG图转换为Json数据格式,所述Json数据格式中,每个组件都有一个唯一id,通过type属性表示拖拉拽组件中不同组件的类型,拖拉拽组件的组件之间通过to属性进行关联,to属性类型为List,List元素的取值为其下游组件的id。
作为本发明的进一步方案,所述Stage动态切割模块用于将DAG图中的组件切割成有先后关系的Stage,每个Stage包含一到多个组件;所述基于递归算法的SQL自动生成模块基于所述Stage动态切割模块,将DAG图解析为实际执行的SQL语句。
本发明还包括一种基于递归算法的SQL自动生成方法,适用于所述的基于递归算法的SQL自动生成系统,该方法包括以下步骤:
提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据;
将Json数据解析为实际可执行的SQL语句。
进一步的,所述提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据的方法,包括:
通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,进行基于JDBC的多数据源元数据服务;
提供一个通用的可视化界面,通过所述可视化界面以及元数据服务,通过拖拉拽的方式生成用于数据分析的DAG图,进行组件化拖拉拽服务;
可动态地在可视化界面中,通过所述拖拉拽组件生成的DAG图转换为Json数据格式,完成DAG图Json转换服务。
进一步的,所述基于JDBC的多数据源元数据服务的服务内容包含查询数据库实例列表、查询Table列表以及查询Table字段信息,元数据查询服务用于给DAG图绘制提供必要的元数据信息;
所述组件化拖拉拽服务的服务功能包括提供用于数据分析的拖拉拽组件,展示数据库实例列表以及展示Table列表;其中,所述用于数据分析的拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
进一步的,所述将Json数据解析为实际可执行的SQL语句,包括如下服务:Stage动态切割算法以及基于递归算法的SQL自动生成算法;所述Stage动态切割算法用于将DAG图中的组件切割成有先后关系的Stage,每个Stage包含一到多个组件,所述Stage动态切割算法的实现步骤为:
将DAG图Json转换服务生成的Json数据转换为Json对象数组;
提取Json对象数组中的json对象;
判断json对象是否包含“to”属性;
如果包含“to”属性,则将该对象的id添加到以“to”对应的id为key值,value类型为List的Map中;
如果不包含“to”属性,则说明该组件没有下游组件,此时将该组件id添加到一个集合中,该集合为后续递归算法提供起始Stage;
如果整个json数据都没有出现“to”属性,则说明对应的DAG图只有一个组件,此时将该组件的id为key、value为null的条目添加到stageIds中;
定义Stage数组stages,将stageIds中的数据添加到stages中;
将源组件单独设置为一个Stage,该Stage没有fromList,将Stage添加到stages数组中,DAG的Stage划分完毕。
进一步的,所述基于递归算法的SQL自动生成算法的实现步骤为:
找到终止位置的Stage,并添加到栈中,在Stage动态切割算法中,已得到所有Stage—stages,以及末端组件id集合—lastNodeIds,则stages中所有toid被包含在lastNodeIds的Stage即为终止Stage,将终止Stage添加到栈stageStack中;
遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中;
递归地执行遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中的步骤,直至当前Stage无上游Stage;
将当前Stage转换为SQL语句;
当前Stage处理完成后,则从栈stageStack中弹出;
跳转至遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中继续执行,直至stageStack为空;
若stageStack为空,则算法结束,此时“终止Stage”生成的SQL即为DAG图最终生成的SQL。
本发明提供的技术方案,具有如下有益效果:
本发明能够以图形化拖拉拽的方式创建DAG图,并将DAG图转换为特定格式的Json数据,将DAG图解析为实际可执行的SQL语句,降低了SQL语句生成及汇总的复杂程度,可以支持生成各种复杂SQL语句,避免了手动书写出错的问题,提高了工作效率,使数据的准确性得到很高的提升。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例的一种基于递归算法的SQL自动生成系统的总体架构框图。
图2为本发明实施例的一种基于递归算法的SQL自动生成方法中商品销量统计DAG图。
图3为图2中一种基于递归算法的SQL自动生成方法中Stage动态切割的DAG图。
图4为图3中一种基于递归算法的SQL自动生成方法中将表输入组件单独划分为一个Stage的DAG图。
图5为图4中一种基于递归算法的SQL自动生成方法中DAG仅仅包含表输入组件的DAG图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
针对汇总数据需求中手动写SQL语句来完成该工作存在的笔误就会导致不能正常执行等诸多弊端,本发明提供了一种以图形化拖拉拽的方式创建DAG图,并将DAG图转换为特定格式的Json数据,将DAG图解析为实际可执行的SQL语句的基于递归算法的SQL自动生成系统与方法,可以支持生成各种复杂SQL语句,提高了工作效率,使数据的准确性得到很高的提升。以下将结合具体实施例加以说明。
实施例1:
如图1所示,本实施例提供一种了基于递归算法的SQL自动生成系统,该系统包括数据分析可视化DAG子系统和SQL自动生成子系统。
所述数据分析可视化DAG子系统,用于提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为特定的Json数据。
所述SQL自动生成子系统,用于将Json数据解析为实际可执行的SQL语句。
在本实施例中,所述数据分析可视化DAG子系统包含如下服务模块:
1)基于JDBC的多数据源元数据服务模块;
2)组件化拖拉拽服务模块;
3)DAG图Json转换服务模块。
其中,基于JDBC的多数据源元数据服务模块用于通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,该元数据服务模块的服务内容包括:
1)查询数据库实例列表;
2)查询Table列表;
3)查询Table字段信息;
元数据查询服务用于给DAG图绘制提供必要的元数据信息。
其中,组件化拖拉拽服务模块用于提供一个通用的可视化界面,通过该界面,以及上述元数据服务,可以通过拖拉拽的方式生成用于数据分析的DAG图,该组件化拖拉拽服务模块的服务功能有:
1)提供用于数据分析的拖拉拽组件;
2)展示数据库实例列表;
3)展示Table列表。
其中,用于数据分析的拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
在本实施例中,所述表输入组件通过数据库实例列表->Table列表,选择Table后,该组件与选择的Table进行关联,Table的字段名称、类型等信息实时保存于组件中,该组件为数据源,即TableSource,用于查询。该组件可选择性的内置条件过滤组件、字段选择组件、分组聚合组件,以方便属性配置。该组件之前不可连接其他组件。
在本实施例中,所述表输出组件通过数据库实例列表->Table列表,选择Table后,该组件与选择的Table进行关联,Table的字段名称、类型等信息实时保存于组件中,该组件为输出表,即TableSink,用于插入。该组件之后不可连接其他组件。
在本实施例中,所述条件过滤组件对前置组件(如表输入组件)进行条件过滤,并将过滤后结果输出到下一节点。
在本实施例中,所述字段选择组件对前置组件(如表输入组件)进行字段选择,同时也可添加新的字段(如常量字符串,数字等)。
在本实施例中,所述分组聚合组件对前置组件(如表输入组件、字段选择字段等)进行分组聚合,所述分组聚合组件设置项包括:
1)分组字段选择(对应group by之后的字段);
2)分组条件设置(对应having之后的条件);
分组字段和条件中的字段都是基于前一个组件的输出字段。
该组件可选择性的内置条件过滤组件、字段选择组件,以方便属性配置。
在本实施例中,所述连接组件的前置组件有且仅有两个,前置组件的类型可以是除表输出组件之外的所有组件。所述连接组件配置项包括:
1)连接类型,包括内连接(inner join)、左连接(left join)、右连接(rightjoin);
2)指定左表,即从前置的两个组件中选择一个作为左表,相应的,未被选中的前置组件会被当作为右表;
3)设置连接条件,连接条件中的字段来自于前置组件的输出字段;
该组件可选择性的内置条件过滤组件、字段选择组件,以方便属性配置。
在本实施例中,所述联合组件的前置组件可以由两个或者多个,前置组件的类型可以是除表输出组件之外的所有组件。
在本实施例中,所述DAG图Json转换服务模块可动态地将可视化界面中,通过拖拉拽组件生成的DAG图转换为Json数据格式。其中,Json数据格式说明如下:
1)每个组件都有一个唯一id;
2)通过type属性表示不同组件的类型,各组件对应的类型名称为:输入组件:TableInput;
表输出组件:TableOutput;条件过滤组件:Filter;字段选择组件:FieldSelect;分组聚合组件:GroupBy;连接组件:Join;联合组件:Union;
3)组件之间通过to属性进行关联,to属性类型为List,List元素的取值为其下游组件的id;
4)其他属性配置项为:
在本发明实施例中,所述SQL自动生成子系统将前述Json数据转换为实际可执行的SQL语句,所述SQL自动生成子系统包括Stage动态切割模块和基于递归算法的SQL自动生成模块。
实施例2:
本实施例提供了一种基于递归算法的SQL自动生成方法,适用于所述的基于递归算法的SQL自动生成系统,该方法包括以下步骤:
提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据;
将Json数据解析为实际可执行的SQL语句。
在本实施例中,所述提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据的方法,包括:
通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,进行基于JDBC的多数据源元数据服务;
提供一个通用的可视化界面,通过所述可视化界面以及元数据服务,通过拖拉拽的方式生成用于数据分析的DAG图,进行组件化拖拉拽服务;
可动态地在可视化界面中,通过所述拖拉拽组件生成的DAG图转换为Json数据格式,完成DAG图Json转换服务。
在本实施例中,所述基于JDBC的多数据源元数据服务的服务内容包含查询数据库实例列表、查询Table列表以及查询Table字段信息,元数据查询服务用于给DAG图绘制提供必要的元数据信息;
所述组件化拖拉拽服务的服务功能包括提供用于数据分析的拖拉拽组件,展示数据库实例列表以及展示Table列表;其中,所述用于数据分析的拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
在本实施例中,所述将Json数据解析为实际可执行的SQL语句,包括如下服务:Stage动态切割算法以及基于递归算法的SQL自动生成算法;所述Stage动态切割算法用于将DAG图中的组件切割成有先后关系的Stage,每个Stage包含一到多个组件,所述Stage动态切割算法实现步骤为:
1)将DAG图Json转换服务生成的Json数据转换为Json对象数组(即JSONArray);
2)提取Json对象数组中的json对象(即JSONObject);
3)判断json对象是否包含“to”属性;
4)如果包含“to”属性,则将该对象的id添加到以“to”对应的id(即其下游组件的id,这里可能会出现多个id,即该组件可能指向多个下游组件)为key值,value类型为List的Map中(该Map可定义为:Map<String, List<String>> stageIds);
5)如果不包含“to”属性,则说明该组件没有下游组件,此时将该组件id添加到一个集合中(该集合可定义为:Set<String> lastNodeIds),该集合为后续递归算法提供起始Stage;
6)如果整个json数据都没有出现“to”属性,则说明对应的DAG图只有一个组件(此时前述stageIds为空),此时将该组件的id为key、value为null的条目添加到stageIds中;
7)定义Stage数组stages(stages = new ArrayList<>()),将stageIds中的数据添加到stages中(stageIds.forEach((to, fromList) -> stages.add(new Stage(fromList, to))););
8)将源组件(本系统中为表输入组件)单独设置为一个Stage,该Stage没有fromList,将Stage添加到7)中的stages数组中;
至此DAG的Stage划分完毕。
参见图2所示,假设DAG图如图2所示,通过Stage动态切割算法的前四步,可以切割Stage如图3所示,通过算法的第7)和8)步,可以将表输入组件单独划分为一个Stage,如图4所示;通过算法第6)步,可以将单个组件正确划分为Stage,如DAG仅仅包含表输入组件,如图5所示。
在本实施例中,所述基于递归算法的SQL自动生成算法基于前述Stage动态切割算法,将DAG图解析为可实际执行的SQL语句。所述基于递归算法的SQL自动生成算法的实现步骤为:
1)找到终止位置的Stage(本系统中可以有多个终止Stage);具体方法如下:
在Stage动态切割算法中,已得到所有Stage—stages,以及末端组件(该组件没有下游组件)id集合—lastNodeIds,则stages中所有toid被包含在lastNodeIds的Stage即为终止Stage。将终止Stage添加到栈stageStack中(stageStack = new Stack<>())。
需要特别说明的是:栈是一种数据结构,具有先进后出的特点。
2)遍历stageStack,取出一个Stage,获取该Stage的上游Stage(可能有0至多个),将上游Stage压入栈stageStack中,获取上游Stage的具体方法:
取出当前Stage的fromList属性,如果fromList不为空,则stages中所有toid被包含在fromList中的Stage即为当前Stage的上游Stage。
3)递归地执行第2)步,直至当前Stage无上游Stage。
4)将当前Stage转换为SQL语句,分多种情况处理:
4.1)Stage仅包含一个组件,这个情况出现在处理表输入组件时,如图4中的Stage0。
需要特别说明的是:因为每个组件都对应一个json对象,且该json对象包含了所有必要信息(如数据源、表名、输出字段、过滤、分组等),所有可以很方便的将表输入组件转换为SQL。
4.2)Stage包含两个组件,此时,Stage中的to组件的类型可以是:表输出组件、条件过滤组件、字段选择组件,或分组聚合组件;
因为Stage被递归的处理,所以该组件中的from组件已被处理过(即已被转换为select语句)。可以将from组件看成一个逻辑表(每个组件都会被分配唯一的表别名,如T1、T2等),此时按照4.1)的方法即可成功解析。
需要特别说明的是:如上述图例中Stage1,其包含了表输入和分组两个组件。其中表输入组件已被递归地处理过,只需将其看成一个逻辑表(T1),从该逻辑表中执行T2的分组逻辑即可。
4.3)Stage包含三个组件,且Stage中的to组件的类型为连接组件;方法与4.1)和4.2)类似,只是此处使用Join相关语法。
需要特别说明的是:如上述图例中Stage3,其包含了分组、过滤和JOIN连接三个组件。因本算法递归地处理Stage,所以Stage3生成的SQL中包含了Stage0、Stage1和Stage2中生成的SQL,并且在这些SQL的基础上执行了Join的逻辑。
4.4)Stage包含三到多个组件,且Stage中的to组件的类型为联合组件;方法与4.1)和4.2)类似,只是此处使用Union相关语法。
5)当前Stage处理完成后,则从栈stageStack中弹出;
6)跳转至第2)步继续执行,直至stageStack为空;
7)若stageStack为空,则算法结束,此时“终止Stage”(终止Stage定义见第1)步)生成的SQL即为DAG图最终生成的SQL。
综上所述,本发明能够以图形化拖拉拽的方式创建DAG图,并将DAG图转换为特定格式的Json数据,将DAG图解析为实际可执行的SQL语句,降低了SQL语句生成及汇总的复杂程度,可以支持生成各种复杂SQL语句,避免了手动书写出错的问题,提高了工作效率,使数据的准确性得到很高的提升。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种基于递归算法的SQL自动生成系统;其特征在于,包括数据分析可视化DAG子系统和SQL自动生成子系统:
所述数据分析可视化DAG子系统,包含基于JDBC的多数据源元数据服务模块、组件化拖拉拽服务模块以及DAG图Json转换服务模块,所述数据分析可视化DAG子系统用于提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据;
所述SQL自动生成子系统用于将Json数据解析为实际可执行的SQL语句,所述SQL自动生成子系统包括Stage动态切割模块以及基于递归算法的SQL自动生成模块;
所述将Json数据解析为实际可执行的SQL语句,包括如下服务:Stage动态切割算法以及基于递归算法的SQL自动生成算法;所述Stage动态切割算法用于将DAG图中的组件切割成有先后关系的Stage,每个Stage包含一到多个组件,所述Stage动态切割算法的实现步骤为:
将DAG图Json转换服务生成的Json数据转换为Json对象数组;
提取Json对象数组中的json对象;
判断json对象是否包含“to”属性;
如果包含“to”属性,则将该对象的id添加到以“to”对应的id为key值,value类型为List的Map中;
如果不包含“to”属性,则说明该组件没有下游组件,此时将该组件id添加到一个集合中,该集合为后续递归算法提供起始Stage;
如果整个json数据都没有出现“to”属性,则说明对应的DAG图只有一个组件,此时将该组件的id为key、value为null的条目添加到stageIds中;且此时定义Stage数组stages,并将stageIds中的数据添加到stages中;
将源组件单独设置为一个Stage,该Stage没有fromList,将Stage添加到stages数组中,DAG的Stage划分完毕。
2.如权利要求1所述的基于递归算法的SQL自动生成系统,其特征在于,所述基于JDBC的多数据源元数据服务模块通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,所述基于JDBC的多数据源元数据服务模块的服务内容包括:查询数据库实例列表、查询Table列表以及查询Table字段信息,所述基于JDBC的多数据源元数据服务模块中的元数据查询服务用于给DAG图绘制提供必要的元数据信息。
3.如权利要求2所述的基于递归算法的SQL自动生成系统,其特征在于,所述组件化拖拉拽服务模块用于提供一个通用的可视化界面,通过所述可视化界面以及元数据服务,通过拖拉拽的方式生成用于数据分析的DAG图;所述组件化拖拉拽服务模块的服务功能包括:提供用于数据分析的拖拉拽组件,展示数据库实例列表以及展示Table列表;
其中,所述拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
4.如权利要求3所述的基于递归算法的SQL自动生成系统,其特征在于,所述DAG图Json转换服务模块用于可动态地在可视化界面中,通过所述拖拉拽组件生成的DAG图转换为Json数据格式,所述Json数据格式中,每个组件都有一个唯一id,通过type属性表示拖拉拽组件中不同组件的类型,拖拉拽组件的组件之间通过to属性进行关联,to属性类型为List,List元素的取值为其下游组件的id。
5.如权利要求4所述的基于递归算法的SQL自动生成系统,其特征在于,所述Stage动态切割模块用于将DAG图中的组件切割成有先后关系的Stage,每个Stage包含一到多个组件;所述基于递归算法的SQL自动生成模块基于所述Stage动态切割模块,将DAG图解析为实际执行的SQL语句。
6.一种基于递归算法的SQL自动生成方法,其特征在于,所述基于递归算法的SQL自动生成方法适用于权利要求1-5中任意一项所述基于递归算法的SQL自动生成系统;该方法包括以下步骤:
提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据;
将Json数据解析为实际可执行的SQL语句。
7.如权利要求6所述的基于递归算法的SQL自动生成方法,其特征在于,所述提供图形化拖拉拽的方式创建用于数据分析的DAG图,并将DAG图转换为Json数据的方法,包括:
通过JDBC与常见的数据库系统建立连接,提供元数据查询服务,进行基于JDBC的多数据源元数据服务;
提供一个通用的可视化界面,通过所述可视化界面以及元数据服务,通过拖拉拽的方式生成用于数据分析的DAG图,进行组件化拖拉拽服务;
可动态地在可视化界面中,通过拖拉拽组件生成的DAG图转换为Json数据格式,完成DAG图Json转换服务。
8.如权利要求7所述的基于递归算法的SQL自动生成方法,其特征在于,所述基于JDBC的多数据源元数据服务的服务内容包含查询数据库实例列表、查询Table列表以及查询Table字段信息,元数据查询服务用于给DAG图绘制提供必要的元数据信息;
所述组件化拖拉拽服务的服务功能包括提供用于数据分析的拖拉拽组件,展示数据库实例列表以及展示Table列表;其中,所述用于数据分析的拖拉拽组件包括表输入组件、表输出组件、条件过滤组件、字段选择组件、分组聚合组件、连接组件以及联合组件,所述拖拉拽组件的各组件单独设置属性,组件之间通过连线进行组合,形成DAG图。
9.如权利要求6所述的基于递归算法的SQL自动生成方法,其特征在于,所述基于递归算法的SQL自动生成算法的实现步骤为:
找到终止位置的Stage,并添加到栈中,在Stage动态切割算法中,已得到所有Stage—stages,以及末端组件id集合—lastNodeIds,则stages中所有toid被包含在lastNodeIds的Stage即为终止Stage,将终止Stage添加到栈stageStack中;
遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中;
递归地执行遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中的步骤,直至当前Stage无上游Stage;
将当前Stage转换为SQL语句;
当前Stage处理完成后,则从栈stageStack中弹出;
跳转至遍历stageStack,取出一个Stage,获取该Stage的上游Stage,将上游Stage压入栈stageStack中继续执行,直至stageStack为空;
若stageStack为空,则算法结束,此时“终止Stage”生成的SQL即为DAG图最终生成的SQL。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111352343.0A CN113792067B (zh) | 2021-11-16 | 2021-11-16 | 一种基于递归算法的sql自动生成系统与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111352343.0A CN113792067B (zh) | 2021-11-16 | 2021-11-16 | 一种基于递归算法的sql自动生成系统与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113792067A CN113792067A (zh) | 2021-12-14 |
CN113792067B true CN113792067B (zh) | 2022-02-11 |
Family
ID=78955307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111352343.0A Active CN113792067B (zh) | 2021-11-16 | 2021-11-16 | 一种基于递归算法的sql自动生成系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113792067B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010438B (zh) * | 2022-12-22 | 2023-11-28 | 北京柏睿数据技术股份有限公司 | 一种数据库操作延迟计算的方法和系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016088281A1 (en) * | 2014-12-01 | 2016-06-09 | Nec Corporation | Multiple query optimization in sql-on- hadoop systems |
CN109375912B (zh) * | 2018-10-18 | 2021-09-21 | 腾讯科技(北京)有限公司 | 模型序列化方法、装置及存储介质 |
CN109726216A (zh) * | 2018-12-29 | 2019-05-07 | 北京九章云极科技有限公司 | 一种基于有向无环图的数据处理方法和处理系统 |
CN111831272A (zh) * | 2019-04-15 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种采用图形化的开发的方法、介质、设备和装置 |
CN112579625A (zh) * | 2020-09-28 | 2021-03-30 | 京信数据科技有限公司 | 多源异构数据治理方法及装置 |
-
2021
- 2021-11-16 CN CN202111352343.0A patent/CN113792067B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113792067A (zh) | 2021-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106934062B (zh) | 一种查询elasticsearch的实现方法及系统 | |
US7853553B2 (en) | Engine for converting data from a source format to a destination format using user defined mappings | |
CN107515887B (zh) | 一种适用于多种大数据管理系统的交互式查询方法 | |
CN110515973B (zh) | 一种数据查询的优化方法、装置、设备及存储介质 | |
US9753960B1 (en) | System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria | |
US10296505B2 (en) | Framework for joining datasets | |
CN114328471B (zh) | 一种基于数据虚拟化引擎的数据模型及其构建方法 | |
CN104268428A (zh) | 一种用于指标计算的可视化配置方法 | |
CN111008020B (zh) | 将逻辑表达式解析为通用查询语句的方法 | |
US20080092034A1 (en) | Identifying and annotating shared hierarchical markup document trees | |
CN110019314B (zh) | 基于数据项分析的动态数据封装方法、客户端和服务端 | |
CN112434046B (zh) | 一种数据血缘分析方法、装置、设备及存储介质 | |
US8635242B2 (en) | Processing queries on hierarchical markup data using shared hierarchical markup trees | |
CN113792067B (zh) | 一种基于递归算法的sql自动生成系统与方法 | |
CN113159618A (zh) | 一种技术视角分离的规则引擎设计方法和装置 | |
CN115292350A (zh) | Sql语句的处理方法及装置 | |
CN116225455B (zh) | 一种统计分析报表快速生成方法 | |
CN117349368A (zh) | 基于Flink的跨库数据实时同步任务管理系统及方法 | |
CN117076742A (zh) | 数据血缘追踪方法、装置及电子设备 | |
CN108509187B (zh) | 一种自动生成软件平台mib功能代码的方法及系统 | |
CN115080011B (zh) | 基于抽象语法树的代码生成方法及系统 | |
CN114201602B (zh) | 为可视化数据分析生成自然语言语句的方法及装置 | |
CN114297443B (zh) | 图数据查询语句的处理方法、装置、设备及存储介质 | |
CN114969193A (zh) | 一种图表数据的生成方法及系统及装置及介质 | |
CN114860668A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: A recursive algorithm based SQL automatic generation system and method Effective date of registration: 20231204 Granted publication date: 20220211 Pledgee: Wuhan area branch of Hubei pilot free trade zone of Bank of China Ltd. Pledgor: Panoramic Zhilian (Wuhan) Technology Co.,Ltd. Registration number: Y2023980068905 |