当前位置: 首页 > news >正文

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语法(维度对齐语法)
• 权限控制(可视文件)
• 虚表特殊字段(枚举字段、二值字段、冗余字段)
在本课程中并未涉及,我们将在进阶课中继续讲解,感兴趣的同学可以先参考文档学习。

http://www.dtcms.com/a/320887.html

相关文章:

  • 【网络】TCP/UDP协议
  • 通过上下文工程优化LangChain AI Agents(二)
  • 佳维视高亮度工业显示器,强光环境清晰可见
  • 从深度伪造到深度信任:AI安全的三场攻防战
  • 饿了么零售 sign 分析
  • WPF 动画卡顿
  • 技术速递|GPT-5 正式上线 Azure AI Foundry
  • [激光原理与应用-176]:测量仪器 - 频谱型 - AI分类与检测相对于传统算法的优缺点分析
  • 人工智能与智能家居:家居生活的变革
  • sqlite的sql语法与技术架构研究
  • 安装向量数据库chromadb
  • GPT-5测试后全面解析:性能突破、用户反馈与未来展望
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
  • 前后端日期交互方案|前端要传时间戳还是字符串?后端接收时是用Long还是Date还是String?
  • Baumer相机如何通过YoloV8深度学习模型实现危险区域人员的实时检测识别(C#代码UI界面版)
  • 什么是2米分辨率卫星影像数据?
  • JavaScript 对象的解构
  • 5. 缓存-Redis
  • windows 上编译PostgreSQL
  • 极地轨道卫星定位数量问题
  • 数学建模——遗传算法
  • Effective C++ 条款30:透彻了解inlining的里里外外
  • Python名称映射技术:基于序列元素的高级访问模式详解
  • 嵌入式 - 数据结构:哈希表和排序与查找算法
  • 为什么提升模型尺度可以提升模型的CoT能力
  • 浏览器面试题及详细答案 88道(01-11)
  • WPF 表格中单元格使用下拉框显示枚举属性的一种方式
  • Ignite内部事件总线揭秘
  • SQL Server 2019搭建AlwaysOn高可用集群
  • Java学习进阶--集合体系结构