1

jdbcでTERADATAにデータを挿入したいのですが、遅いです。どうすれば速くなりますか?

私はこのコードを書きました:

connection_tera= DriverManager.getConnection
             (
             "jdbc:teradata://192.168.x.xx/database=DBC,tmode=ANSI,charset=UTF8","dbc","dbc"
             ); 

stmt_tera = connection_tera.prepareStatement("insert into a.b values(?)");
//some code here to start while loop 
  stmt_tera.setObject(i,reset.getobject(i));
  stmt_tera.addBatch();  
 if(addedBatchNumber%100==0)
  stmt_tera.executeBatch(); 
  connection_tera.commit(); 
  stmt_tera.clearBatch();
//some code here and finish while loop

TYPE=FASTLOAD のようなパラメーターを接続文字列に追加する必要がありますか? または、他の何か?

4

3 に答える 3

3

のテーブルにロードする場合は、JDBC FastLoad の使用を検討します。Teradata テーブルにデータを挿入するための JDBC のパフォーマンスの詳細については、Teradata Developer Exchange の次の記事を参照してください: JDBC/ODBC アプリケーションの高速化

テーブルが空でない場合は、最初に空のステージング (中間) テーブルにデータをロードすることをお勧めします。次に、ANSIMERGE操作を使用して、INSERT/UPDATEロジックをターゲット テーブルに適用します。この操作は、行レベルではなくブロック レベルで機能するためMERGE、従来のINSERTandステートメントよりも高速に実行されます。UPDATE場合によっては、データがターゲット テーブルに適用される前に、ソース データのスプールを回避することもできます。

サンプルの Teradata JDBC Driver プログラムのコレクションを次に示します。プログラム 205 から 209 は、FastLoad の使用例です。

于 2013-07-03T13:50:31.717 に答える
1

私がこれを正しく読んでいる場合、挿入ステートメントが1つしかないバッチを実行およびコミットしています-それはあなたの意図ではないと思います(または、そうである場合、バッチがどのように期待されるかを誤解していると思います利用される )

任意の数のステートメントをバッチに追加してから送信する内部ループが必要なようですexecuteBatch()

于 2013-07-03T09:14:07.393 に答える