DQL

发布时间:2018-05-28 分类:名词解释 Tag:

DQL(Dimensional Query Language)是一种面向结构化数据的查询语言,主要用于多维分析,DQL可以读作[dikwl]。

SQL是当前主要的结构化数据查询语言,但由于其理论基础关系代数中对关联运算(JOIN)的定义过于简单,用SQL描述多表关联时就显得非常复杂,特别是在用于敏捷BI或自助报表等场景时,难以提供让业务人员可理解的方式实现关联查询。这样,当有新的关联查询时,就需要技术人员在后台维护新的数据集(CUBE),即数据集建模。而关联查询需求的占比要远远大于无关联查询,基于SQL就无法实现完整的敏捷BI。

为了解决SQL的这个问题,中国润乾公司在2013年提出了DQL语法,梳理了数据表的关联关系,把SQL中简单的JOIN运算分成多种情况分别处理,将多表关联问题转换成单表查询,从而极大地降低了关联运算的理解难度,可以由业务人员可理解的方式实现非常复杂的多表关联。而且,DQL看待JOIN的方式不同,还可以采用更好的算法,解决SQL实现时HASH JOIN算法难以并行的问题。

DQL仍然面向数据查询需求,因此其语法仍然延用了SQL类英语的风格。DQL中严格定义并强化了维度概念,因而命名为DQL。

DQL设计目标是敏捷BI(自助报表)的后台查询语法,弱化了SQL中的复杂计算能力,不再支持子查询和CTE语法。


目前,润乾公司已经基于SQL实现了DQL语法,即把DQL翻译成SQL执行,在润乾报表2018版的强分析版中提供此功能。另外,DQL强化维度概念后,在润乾集算器的支持下,将很容易实现多个同结构数据库的跨库联合查询,从而支持大数据的分布式查询。润乾公司还将基于进一步基于SPL实现更高性能的大数据DQL解释器。


一个DQL和SQL的对比示例:

设有如下两个表

employee 员工表
id 员工编号
name 姓名
nationality 国籍
department 所属部门

 

department 部门表
id 部门编号
name 部门名称
manager 部门经理

employee表和delpartment表的主键都是其中的id字段,employee表的department字段是指向department表的外键,department表的manager字段又是指向employee表的外键。

查询目标:哪些美国籍员工有一个中国籍经理?

SQL代码

SELECT A.* FROM employee A JOIN department B ON A.department=B.id JOIN employee C ON B.manager=C.id

WHERE A.nationality=‘美国' AND C.nationality=‘中国'

由于employee表需要两次参与JOIN,需要为它起个别名加以区分,大部分敏捷BI产品在未建模时无法让业务人员实现这个查询。

DQL代码

SELECT * FROM employee WHERE nationality='美国' AND department.manager.nationality='中国'

把多表JOIN转换成单表查询,很容易开发界面让业务人员理解并实现这个查询。