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转换成单表查询,很容易开发界面让业务人员理解并实现这个查询。

网站地图