gpt4 book ai didi

java - 使用并行处理加速选择查询

转载 作者:行者123 更新时间:2023-12-02 10:58:11 25 4
gpt4 key购买 nike

我正在运行一个简单的选择查询来从表中获取所有值,并使用 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 个月的数据(在确保数据库可以处理 36 个连接之后)并将结果聚合到一个文件中.

java或oracle函数中是否有任何库可以通过并行查询数据并聚合结果集来帮助实现相同的目的。

编辑:

我使用 Pentaho,它能够在我的笔记本电脑上在 13 分钟内创建一个包含 800K 条记录的文件。这似乎比上面列出的代码要快得多,上面列出的代码花费了 30 多分钟但没有完成。

最佳答案

我认为使用java是一个坏主意。也许您可以从 java 进行系统调用来执行完成这项工作的 sql session :

set term off
set feed off
set sqlformat csv

spool tablename_output.csv

select /*+ parallel */ * from <tablename>;

spool off

否则:

set term off
set feed off

spool tablename_output.csv

select /*+ parallel */ field1 || ';' || field2... from <tablename>;

spool off

关于java - 使用并行处理加速选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51550096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com