我正在运行一个简单的select查询,从表中获取所有值,并使用Java代码将结果集写入CSV文件。代码如下-
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
info.setProperty("user", "<username>"); //x_sbe_read
info.setProperty("password", "<password>");
Connection conn = DriverManager.getConnection("<burl>", info);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select '/*+ PARALLEL(t,10) */' from <tablename> t");
File resultFile = new File("/tmp/data.csv");
CSVWriter csvWriter = new CSVWriter(new FileWriter(resultFile), CEDILLA_CHAR, Character.MIN_VALUE, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
csvWriter.writeAll(rset, false);
csvWriter.close();
rset.close();
stmt.close();
conn.close();
此表包含过去3年的数据。我想加速这个过程的方法之一是运行一个单独的线程,从而旋转36个线程,每个线程查询1个月的数据(在确保db可以处理36个连接之后),并将结果聚合到一个文件中。
java或oracle函数中是否有任何库可以通过并行查询数据和聚合结果集来帮助实现相同的功能。
编辑:
我使用Pentaho,它能在我的笔记本电脑上在13分钟内用一张表中的800K记录创建一个文件。这似乎比上面列出的代码要快得多,它花了30多分钟才完成。