经过一定数量的批量执行后,Teradata JDBC Error 1338

时间:2016-09-14 13:46:17

标签: java r jdbc batch-insert rjdbc

我正在尝试将3.8M记录插入到包含14列的Teradata表中,通过使用RJDBC R包的一批10000条记录。 插入380000个记录后,即第39次批处理时,它总是崩溃。 这是我得到的错误,

  

.jcall错误(ps," [I"," executeBatch"):
  java.sql.BatchUpdateException:[Teradata JDBC Driver] [TeraJDBC   15.10.00.22] [错误1338] [SQLState HY000]执行PreparedStatement批处理请求时发生故障。失败的细节   可以在可访问的异常链中找到   的getNextException。

我已尝试从同一数据框更改为不同的行集。并且,行为保持不变,在第39批执行时崩溃。

知道这个Error 1338是什么,可能是什么修复? 此外,它提到getNextException,但我如何使用R?

我使用的方法与此类似 https://developer.teradata.com/blog/ulrich/2013/11/a-wider-test-case-on-r-jdbc-fastload

2 个答案:

答案 0 :(得分:0)

要获取初始异常" object",您需要使用.jgetEx,然后您可以在其上使用getNextException方法来检索根本原因。

有关完整示例,请参阅teradata开发人员论坛上的this link

批量插入期间异常的典型原因是:

  • "值相关":无效值,数字数据精度过高
  • "尺寸相关" :插入的行在数据库中创建了一个"不再有空间"错误

既然你说你已经测试了不同的数据集并且它们都在同一个执行中失败了,那很可能是#strong; 数据库中不再有空间&# 34。

但是,这并不一定意味着已授予您的空间已满:可能是表格选择不当主要索引(或者数据有产生重复主索引的错误,导致分布非常偏斜。在这种情况下,如果您可以定义更合适的主索引(或使用NOPI表,如果您将其用作某种排序),则会浪费大量可回收的空间阶段表)。

Here你可以找到关于这个"空间浪费的讨论"主题包含许多有用的查询来诊断问题。

答案 1 :(得分:0)

我也碰巧,我试图将27.4M记录插入包含8列的Teradata表中。在535万行时出现了相同的错误。

对我而言唯一有效的方法是每1M条记录进行一次提交。