我想用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的参数添加到连接字符串吗?或其他什么?
答案 0 :(得分:2)
如果要加载到空表,我会考虑使用JDBC FastLoad。有关将数据插入Teradata表的JDBC性能的更多详细信息,请参阅Teradata Developer Exchange上的以下文章:Speed up your JDBC/ODBC Applications
如果您的表不为空,则可以将数据加载到先前为空的登台(中间)表中。然后使用ANSI MERGE
操作将INSERT/UPDATE
逻辑应用于目标表。 MERGE
操作的执行速度比传统的INSERT
和UPDATE
更快,因为操作在块级而不是行级工作。在某些情况下,您甚至可以在将数据应用于目标表之前避免假脱机源数据。
以下是Teradata JDBC驱动程序示例的collection。程序205到209是使用FastLoad的示例。
答案 1 :(得分:2)
此外,您还可以考虑硬币的另一面。意思是您可以考虑使用单个查询执行多行插入
insert into table1 (First,Last) values ('Fred','Smith'),
('John','Smith'),
('Michael','Smith'),
('Robert','Smith');
好处是
希望这会有所帮助.. 干杯!
干杯!
答案 2 :(得分:1)
如果我正确地读了这个,你正在执行并提交一个只有一个插入语句的批处理 - 我不认为这是你的意图(或者,如果它是,我认为你误解了批处理预计将被使用)
好像你需要有一个内部循环,可以向批处理中添加任意数量的语句,然后通过executeBatch()
提交