私はこのドキュメントを参照しています。 http://www-01.ibm.com/support/docview.wss?uid=swg21981328。記事では、executeBatchメソッドを使用すると、挿入が高速になります(Netezza JDBCドライバがバッチ挿入を検出して、これを外部テーブルのロードに変換し、外部テーブルのロードを高速化します)。私は何百万もの挿入ステートメントを実行しなければならず、コネクションごとに1分あたり500レコードの速度しか得ていません。 jdbc接続を介してNetezzaにデータをより高速にロードする方法はありますか?私はレコードを挿入するためにスパークとjdbc接続を使用しています。私がバッチで実行しているときでも、ロードによる外部テーブルは起こっていません。下記の私は、だから私はCSV &内のすべてのデータは、各CSVのための外部表のロードを行う入れる(バッチ挿入)このアプローチを試みたが、非常に遅い見つけ、 私は、バッチ実行モードでもNetezzaバッチ挿入が非常に遅い
Dataset<String> insertQueryDataSet.foreachPartition(partition -> {
Connection conn = NetezzaConnector.getSingletonConnection(url, userName, pwd);
conn.setAutoCommit(false);
int commitBatchCount = 0;
int insertBatchCount = 0;
Statement statement = conn.createStatement();
//PreparedStatement preparedStmt = null;
while(partition.hasNext()){
insertBatchCount++;
//preparedStmt = conn.prepareStatement(partition.next());
statement.addBatch(partition.next());
//statement.addBatch(partition.next());
commitBatchCount++;
if(insertBatchCount % 10000 == 0){
LOGGER.info("Before executeBatch.");
int[] execCount = statement.executeBatch();
LOGGER.info("After execCount." + execCount.length);
LOGGER.info("Before commit.");
conn.commit();
LOGGER.info("After commit.");
}
}
//execute remaining statements
statement.executeBatch();
int[] execCount = statement.executeBatch();
LOGGER.info("After execCount." + execCount.length);
conn.commit();
conn.close();
});