批量加载过程中的错误处理
加载各个批时,您可以确定已接受的行数和已拒绝了哪些行(有关详细信息,请参阅确定已接受的行和已拒绝的行)。如果禁用了 AutoCommit 连接设置,则插入各个批时不会发生其他错误(例如磁盘空间错误)。此行为是由单个 SQL COPY 语句对多个连续批执行加载(这样可提高加载过程的效率)导致的。只有 COPY 语句关闭时,才会提交批量数据,而且 Vertica 会报告其他类型错误。
因此,应使批量加载应用程序准备好在 COPY 语句关闭时检查错误。可以通过以下方法促使 COPY 语句关闭:
-
通过调用
Connection.commit()
来结束批量加载事务 -
通过使用
Statement.close()
来关闭该语句 -
在加载中插入最后一批之前将连接的 AutoCommit 属性设置为 true
注意
如果您执行任何非插入语句或者使用不同的Statement
或 PreparedStatement
对象执行任何语句,COPY 语句也会关闭。使用以上任一方法结束 COPY 语句会造成混乱并导致更难以维护应用程序,因为您需要处理非批量加载语句中的批量加载错误。您应当在批量加载结束时显式终止 COPY 语句,同时处理任何错误。