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

SPL 轻量级多源混算实践 1 - 在 RDB 上跑 SQL

RDB 是 SPL 的 Native 数据源,SPL 通过 JDBC 与数据库交互,可以动态生成 / 拼接 SQL,也可以为 SQL 传递参数,原来在 Java 等语言与 SQL 结合的场景都可以使用 SPL 来完成。

导入 MySQL 数据。

配置数据库连接

RDB 是 SPL 的 Native 数据源,SPL 通过 JDBC 与数据库交互,可以动态生成 / 拼接 SQL,也可以为 SQL 传递参数,原来在 Java 等语言与 SQL 结合的场景都可以使用 SPL 来完成。

导入 MySQL 数据。

配置数据库连接

..

连接串:jdbc:mysql://127.0.0.1:3306/bytedba?useSSL=false&useCursorFetch=true

计算用例

查询目标

2024 年各类订单状态的订单金额

设置脚本参数

为脚本设置年份参数用于数据过滤。

..

编写脚本

A
1=connect("dba")
2=A1.query("select order_status,sum(total_amount) tamt,count(1) cnt from orders where year(order_date)=? group by order_status",d_year)
3>A1.close()

A1:连接数据库

A2:执行 SQL 查询,其中 d_year 为脚本参数

A3:关闭数据库连接

将脚本保存成 1.1DB_SQL.splx,并放置到 寻址路径(Search path)下。

..

执行脚本

SPL 脚本可以在 IDE 内执行(编辑调试 / 桌面分析),也可以集成到 Java 应用后调用。

IDE

IDE 内执行脚本可以直接按 ctrl+F9,或者点击工具栏的执行按钮

..

..

Java 调用

从 [esProc 安装目录]\esProc\lib 目录下找到 esProc JDBC 相关的 jar 包:esproc-bin-xxxx.jar、icu4j_60.3.jar。

将这两个 jar 包部署到 Java 开发环境的类路径下,同时将 数据库(如果用到)驱动包也放到应用中。再从目录 [esProc 安装目录]\esProc\config 下找到 esProc 配置文件 raqsoftConfig.xml,同样部署到 Java 开发环境的类路径下。

在 Java 里调用:

public class callSplx {public static void main(String[] args) {String driver = "com.esproc.jdbc.InternalDriver";String url = "jdbc:esproc:local://";try {Class.forName(driver);Connection conn = DriverManager.getConnection(url);PreparedStatement st =conn.prepareCall("call 1.1DB_SQL(?)");st.setObject(1, 2024);st.execute();ResultSet rs = st.getResultSet();System.out.println("order_status\ttamt\t\tcnt");System.out.println("----------------------------------------------");while(rs.next()) {String order_status = rs.getString("order_status");String tamt = rs.getString("tamt");String cnt = rs.getString("cnt");System.out.printf("%-15s%-15s%-15s%n",order_status,tamt,cnt);}} catch (Exception e) {throw new RuntimeException(e);}}
}

其中的 call 1.1DB_SQL(?) 就是调用前面保存的 1.1DB_SQL.splx 脚本。

..

SQL 与 SPL 混合使用

有些复杂计算用 SQL 直接来写比较困难,这时就可以借助 SPL 语法再加工数据。还是以上面的计算为例,我们用 SPL 完成取数后的分组汇总计算。

A
1=connect("dba")
2=A1.query@x("select order_status,total_amount from orders where year(order_date)=?",d_year)
3=A2.groups(order_status;sum(total_amount):tamt,count(1):cnt)

A2:执行 SQL 查询符合条件的明细数据,@x 选项代表查询完成后关闭数据库连接,这样就需要 db.close() 显示关闭连接了。

A3:用 SPL 语法进行分组汇总。

这里 A2 的 SQL 返回的是过滤后的数据,在实际应用时,应该尽量减少数据传输以避免 IO 瓶颈,所以对于数据密集型任务使用 SQL 查询数据时最好先执行一些基本运算(如过滤 / 分组)将数据量降下来。

了解了 SPL 的基本使用,以及如何基于 RDB 查询数据以后,再读取其他数据源就比较容易了。

SPL是开源免费的,下载试用~ 

http://www.xdnf.cn/news/664957.html

相关文章:

  • vue3 浮点数计算
  • 码蹄集——矩形相交
  • 【大模型】分词(Tokenization)
  • unix的定时任务和quartz和spring schedule的cron表达式区别
  • C# 中 INI 文件操作扩展类:轻松管理配置文件
  • 开发一个交易所大概需要多少成本
  • 调试的按钮
  • 2.1 一文掌握 TypeScript 操作符
  • 配置Maven环境(全局)
  • 【辰辉创聚生物】JAK-STAT信号通路相关蛋白:细胞信号传导的核心枢纽
  • 【C++高级主题】异常处理(四):auto_ptr类
  • Linux三剑客之grep命令使用教程
  • 在Java集合中存储对象时,修改已添加到集合中的可变对象会影响集合中已存储的内容
  • AI系统的冲锋队:在线系统构建与应用
  • OpenFOAM中实现UDF(User Defined Function)的方法
  • 品融电商:品牌全域运营的领航者,赋能中国质造新时代
  • MySQL各种日志类型介绍
  • python每日剂量(2)探讨Python中不同解析库的提取速度对比
  • C++笔记-哈希表
  • 嵌入式学习之系统编程(五)进程(2)
  • Spring MVC、Spring 与 MyBatis 整合详解
  • 欧拉操作系统下安装hadoop集群
  • 【前端基础】Promise 详解
  • FacePoke创意交互实战:Cpolar技术赋能远程人像编辑的趣味实现
  • 国内短剧 vs. 海外短剧系统开发:2025年SEO优化与市场策略全解析
  • 机械设计插件
  • MS1824+MS7210+MS2130 1080P@60Hz USB3.0采集
  • 【文献阅读】Mixture of Lookup Experts
  • 语音识别技术在人工智能中的应用
  • 03 环境变量和标签