概述
将csv文件数据以类似表关联方式联查,然后获取查询的结果集数据做进一步处理,比如入库等操作。
环境及主要软件版本说明
- 集算器 产品下载
- java8
一、准备工作
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方式更加轻量级,不知是否还有最优解。欢迎交流。