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方式更加轻量级,不知是否还有最优解。欢迎交流。

相关推荐
牛奔5 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
打工仔折腾 AI6 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
Nebula_g6 小时前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
弈栈录6 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
后端·架构
邱杰4706 小时前
从零手写数智人事系统(十二):部门树、角色授权与菜单维护
后端
PC2005_cloud6 小时前
AI 汉字漂移实录:它为什么总把「学习」写成日语「学習」
前端·后端
码剑客6 小时前
告别逐张排查DICOM:6维度本地批量校验方案,数据零上传更合规
后端
RaaS1006 小时前
AI网关能做Prompt注入防护吗?AI网关核心功能详解
前端·后端
newerp6 小时前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
后端·程序员·go
Zelman6 小时前
第06章-超节点
人工智能·后端