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. 应用集成
学习如何在 Java 中集成调用 DQL
4. 集算器 DQL
学习基于文件查询的 DQL 使用,了解其应用场景
环境准备
学习本课程前需要事先安装产品和下载数据 / 程序文件。
产品
润乾报表: 润乾报表 最新版发布啦『发布日期 20250520』
SPL 企业版: 集算器 (SPL) 最新版发布啦『发布日期 20250605』
数据及程序文件
随安装包附带。