我尝试上传 3MB 非常小的 csv 文件,包含 30,000 行和 4 列。我花了一个多小时
cUrl = "jdbc:odbc:DSN; TYPE=FASTLOAD" ;
Connection conn = DriverManager.getConnection(cUrl, username, password);
String sql = "insert into Transactions(custID, transaction_date, amount, desc) values(?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
for ( ... )
{
ps.setString(1, custID);
ps.setString(2, tran_date);
ps.setString(3, amount);
ps.setString(4, desc);
ps.addBatch();
}
ps.executeBatch();
addBatch
运行非常顺利。我到达 ps.executeBatch();
行,它永远需要它。上传一个 3 MB、30,000 行的 csv 文件花了一个多小时。这是它应该的方式吗
最佳答案
加载 30.000 行最多应该在几秒钟内运行。
您仍然使用了错误的连接字符串,ODBC 中不支持 FastLoad 协议(protocol),TYPE=FASTLOAD 可能会被默默地忽略。
事务表的主索引是什么?糟糕的 PI 加上 SET 表可能会导致加载缓慢。
关于java - 为什么 teradata faSTLoad 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234465/