DQL 超维分析课程

0 准备篇

背景

企业建设 BI 系统的目的是让业务人员灵活自助查询,但实际使用效果却很差。这是因为有意义的查询经常是需要多表关联的,也就是 SQL 中的 JOIN。但业务人员理解不了关联,没法完成这样的工作。所以,BI 产品就要解决关联问题,将多表关联转换成业务人员能接受的单表查询。

目前解决关联计算的方式有两种:宽表和自动关联。

采用物理或逻辑宽表,事先将多表冗余到一个表中,从而消除关联。但宽表方案需要事先准备,根据业务需求决定宽表内容,来了新需求再修改宽表,且不说宽表因为不满足范式可能出现数据错误,需求变化要不断修改模型已经与灵活查询的目标背道而驰了。

还有些产品会根据字段类型、长度等信息进行自动关联,这样用户就不用自己关联了。这种方式只适合极小部分的简单场景,稍微常规一点情况就处理不了。比如一个通话记录表里有主叫号码和被叫号码,两个字段的属性完全一样,要怎么识别该关联哪个?而且情况复杂时这个表可能要被重复关联,比如查询北京号码打给上海号码的通话记录,这个表就要被关联两次,这个表还会有维表也会被复制多次,如果维表还有维表… 这种常见业务自动关联就搞不定了。

..

类似的查询在实际业务中还有很多:

零售业务中,根据销售记录和地区信息查询:不同地区下各个城市的销售情况

物流业务中,根据订单信息(收货城市和发货城市)统计:同城的订单情况

金融业务中,根据交易信息、客户信表、地区信息查询:在指定时间段内不同地区不同客户类型的交易金额和次数

石油业务中,根据油井信息、产量信息以及传感器数据查询:某个油井在指定时间段内每分钟的平均石油和天然气产量,以及平均温度

还有更复杂的情况,涉及自关联和循环关联几乎所有产品都没戏了。

..

出现这些问题的原因在 SQL 上。因为数据常常是存储在关系数据库中,一般也就是使用 SQL 来做查询。而 SQL 对关联运算(JOIN)的定义很简单,两个表关联时,给出对应的关联字段就可以了,除此之外没有更多的信息和约定。这种简单的规则,在关联表多的时候就会让很多人晕掉。

要从根本上解决关联问题就必须重新定义 JOIN。梳理一下会发现,所有有意义的关联查询都涉及主键(多对多几乎没有业务意义,即使发生也能转换成针对主键的查询)。针对这个特性,将关联运算进行了分类,在此基础上发明了 DQL(Dimensional Query Language)一种基于维度的查询语言,从根本上解决 SQL 处理关联问题面临的困境,进而为 BI/ 灵活查询提供服务。

目录

本课程包含以下内容:

1.DQL 原理

了解 DQL 看待 JOIN 的方式,熟悉 DQL(产品)运行原理

2.DQL 概念和语法

学习 DQL 涉及的主要概念及查询语法

3. 生成 DQL 元数据

学习如何建立 DQL 查询模型(元数据)

4. 应用集成

学习如何在 Java 中集成调用 DQL

5. 集算器 DQL

学习基于文件查询的 DQL 使用,了解其应用场景

环境准备

学习本课程前需要事先安装产品和下载数据 / 程序文件。

产品

润乾报表: 润乾报表 最新版发布啦『发布日期 20250520』
SPL 企业版: 集算器 (SPL) 最新版发布啦『发布日期 20250801』

数据及程序文件

随安装包附带。