Java集成esProc 集算器实现联查CSV文件获取结果集

概述

将csv文件数据以类似表关联方式联查,然后获取查询的结果集数据做进一步处理,比如入库等操作。

环境及主要软件版本说明

一、准备工作

1.准备两个csv文件

2.配置及jar依赖

集算器解压后需要如下:

  • config目录中 raqsoftConfig.xml 文件(注释掉了customFunctionFile所在标签行)
  • lib目录中 esproc-20250313.jar、icu4j-60.3.jar(将jar放入项目lib目录中引用即可)

二、编写java程序进行预处理

pom 文件

xml 复制代码
<dependency>
    <groupId>com.esproc</groupId>
    <artifactId>esproc-bin</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/esproc-20250313.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.esproc</groupId>
    <artifactId>esproc-icu4j</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/icu4j-60.3.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.57</version>
</dependency>

java 代码

java 复制代码
import com.alibaba.fastjson2.JSONObject;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class CsvDemo {
    public static void main(String[] args) throws Exception {
        Class.forName("com.esproc.jdbc.InternalDriver");
        try (Connection conn = DriverManager.getConnection("jdbc:esproc:local://");
             Statement stmt = conn.createStatement()) {
            String splScript = "$select t1.a_id as id , t2.year as year \n" +
                    " from {file(\"F:/dev/temps.txt\").import@tc()} as t1 \n" +
                    " left join {file(\"F:/dev/temps2.txt\").import@tc()} as t2 \n" +
                    " on t1.a_id=t2.t_id";
            // 执行脚本并获取结果
            ResultSet rs = stmt.executeQuery(splScript);
            //ResultSetMetaData rsmd = rs.getMetaData();
            //int columnCount = rsmd.getColumnCount();
            //for (int i = 1; i <= columnCount; i++) {
            //    String columnName = rsmd.getColumnName(i);
            //    System.out.println(columnName);
            //}
            // 2. 准备批量插入数据库
            List<Object[]> batchArgs = new ArrayList<>();
            while (rs.next()) {
                Object[] row = new Object[]{
                        rs.getInt("id"),
                        rs.getString("year")
                };
                batchArgs.add(row);
            }
            // 入库操作
            System.out.println("batchArgs = " + JSONObject.toJSONString(batchArgs));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

至此就大功告成了,感觉比flinkSQL方式更加轻量级,不知是否还有最优解。欢迎交流。

相关推荐
uzong3 小时前
技术故障复盘模版
后端
GetcharZp3 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程4 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi4 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国5 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy5 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack6 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9657 小时前
pip install 已经不再安全
后端
寻月隐君7 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github