私はTeradata jdbcドライバ13.00.00.10を使用しており、1億行のフラットファイルをteradataにアップロードしようとしています。JDBCの高速ロード - 2000万回のaddBatch()操作後のOutOfMemory
私は清潔なテーブルから始めます。これは、すばやくすべてのメモリを消費し
while ((s = reader.readLine())!=null){
String[] columns = StringUtils.split(s, separator);
for (int j=0; j <columns.length; j++){
st.setString(j+1,columns[j]);
}
st.addBatch();
i++;
if (i % 10000 ==0){
ULogger.info(this, "imported " + i + " lines.");
}
}
st.executeBatch();
:
は、最初に私は、行ごとにaddBatch()を行うと、端部のみに単一のexecuteBatch()を実行し、ファイル全体を反復処理しようとしました私のアプリケーション。
私は9GB XMXを設定し、〜4000万addBatch()後にOutOfMemoryを取得しました。
それから、私は定期的なexecuteBatch()を実行しようとしました。ファイルを繰り返し実行し、2,000万のaddBatch()はexecuteBatch()を実行します。
while ((s = reader.readLine())!=null){
String[] columns = StringUtils.split(s, separator);
for (int j=0; j <columns.length; j++){
st.setString(j+1,columns[j]);
}
st.addBatch();
i++;
if (i % 20000000 ==0){
st.executeBatch();
st.clearWarnings();
}
}
st.executeBatch();
この場合、最初のexecuteBatch()が成功しました。
ただし、2番目のexecuteBatch()は失敗し、 "データベーステーブルXXXのFastLoadの開始中にerrror"が発生しました。
どのように私は100万行をロードするはずです説明することはできますか?
設定がありません(たとえば、ドライバに定期的にアップデートを送信し、メモリに保持しないように指示するなど)? (http://developer.teradata.com/connectivity/faq)それは言う -
おかげで、
A.
あなたの文はどのようなものに見えるん? –
Teradataのデベロッパーエクスチェンジに関するご質問に対する回答があるようですが、解決策が正しい場合は、ここでこの質問を更新してください。 –