在 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 查询数据以后,再读取其他数据源就比较容易了。

相关推荐
阳光是sunny2 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
灯澜忆梦2 小时前
GO_并发编程---定时器
开发语言·后端·golang
阳光是sunny2 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
皮皮林5512 小时前
开源实力派,给本地 AI 装上深度调研能力,一张 3090 跑到 95.7 分!
后端
努力的小雨3 小时前
把 Windows 桌面图标做成一个会自己运转的小世界
后端
武子康4 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
腾渊信息科技公司4 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
IT_陈寒6 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学6 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈6 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端