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

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

导入 MySQL 数据。

配置数据库连接

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

计算用例

查询目标

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

设置脚本参数

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

编写脚本

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 里调用:

ini 复制代码
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 完成取数后的分组汇总计算。

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

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

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

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

相关推荐
红尘散仙1 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记3 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪3 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6164 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364574 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao4 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒5 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰6 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox6 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全