DQL 超维分析 - 5 集算器 DQL
5 集算器 DQL
前面学习的 DQL 是基于数据库运行,DQL Server 仅负责将 DQL 语句翻译成 SQL,真正的运算工作仍然由数据库完成。当数据库压力较大时,数据库就会成为性能瓶颈从而导致整体查询变慢。不仅如此,三层结构部署和维护都比较繁琐,整体应用结构偏重。
为了解决性能问题,让应用更轻量化,DQL 还有一种直接基于文件查询的形式,集算器 DQL。
DQL Server 不再作为逻辑服务器,其内部存储的数据以组表形式存在(组表是一种高性能列存文件类型),DQL Server 负责真正的数据计算,并通过 JDBC 将计算结果返回给应用。
DQL 元数据仍然要有 IDE 编辑后发布到 DQL Server。
使用流程
集算器 SPL 安装后,启动 DQL 元数据 IDE。将 [安装目录]\esProc\documents\en 下组表文件 pseudo.zip 解压到主目录。
组表文件可以通过集算器 ETL 工具生成,将数据库表转存成 CTX。
集算器 DQL 的使用流程包括:
由于部署和集成我们已经学习过了,这里重点学习元数据编辑部分。
创建定义虚表
虚表是定义在数据文件(组表)上的逻辑表,由于组表具有更高的 IO 性能、更高效的存储方式,创建虚表时可以根据组表特性进行设置。比如为内存表建立索引,使用枚举 / 二值维度等。
在工具栏中选择“增加虚表”,选择对应的组表文件虚表就创建完成了。
虚表名会根据组表文件名命名,其中的主键信息也会随组表设置。
虚表定义也可以通过集算器 ETL 工具生成,在将数据表转储成 CTX 的同时生成虚表定义。在 ETL 工具菜单 - 新建 ETL,拖入要导出的表,再生成虚表定义。
导出的 glmd 文件可以直接被 DQL IDE 打开使用。
由虚表生成表
通过 菜单栏 - 工具 - 由虚表生成表,将虚表向 DQL 表转化。
转换后的 DQL 表设置与操作就跟前面数据库 DQL 的建模过程完全一样了。
维表的设置
由于维表普遍不大,而且会被反复使用,所以对于维表需要将其设置成内存表,这样可以保证维表能全部加载到内存,同时为维表建立索引,以加快使用效率。
DQL 查询
这里直接使用已经准备好的元数据文件(demo.glmd),集算器安装后,在 esProc\esproc-services\datalogic\conf 目录下可以找到。
接下来在集算器 DQL 中进行查询(层次查询):按发货年份汇总订单数量。
SELECT count(orderid) ordercnt
ON year AS shipyear
FROM orders
BY shipdate#year
没有了 SQL 翻译的过程,直接就能查询出数据。DQL 的语法是一致的。
外键关联:查询订单及客户信息。
SELECT orderid,customerid.custname,customerid.contact,shipdate
FROM orders
同维表:查询客户及 VIP 信息。
SELECT custid,custname,viplevel
FROM customer
主子表:查询订单及订单金额信息。
SELECT customerid, orders@orderdetail.SUM(unitprice*quantity*(1-discount)) amount
FROM orders
BY customerid
集算器 DQL 部署
有了前面的经验,集算器 DQL Server 部署需要的 JAR 包括:
esproc-bin-***.jar DQL Server计算引擎及JDBC驱动包
esproc-ext-***.jar DQL Server计算引擎及JDBC驱动包
esproc-ent-***.jar DQL Server计算引擎及JDBC驱动包
json-20240303.jar 解析json格式串
lz4-1.3.0.jar 压缩ctx文件
其他部分与前面数据库 DQL 部署一致。
启动文件:
[安装根目录]/esProc/bin:startDQLSERVER.bat/dqlserver.exe
剩下的应用集成和 Java 调用与前面一致,不再赘述。
更详细的部署和集成内容可参考:DQL 服务器部署集成-DQL Server 部署
本课程致力于讲解 DQL 原理、DQL 语法和入门,更高级的内容包括:
• 汇总表透明化(基于明细的汇总自动查询汇总表)
• 分区表(如时间分表的处理)
• JOIN语法(维度对齐语法)
• 权限控制(可视文件)
• 虚表特殊字段(枚举字段、二值字段、冗余字段)
在本课程中并未涉及,我们将在进阶课中继续讲解,感兴趣的同学可以先参考文档学习。