处理装载错误

可读外部表最常被用来选择数据装载到普通数据库表中。用户使用CREATE TABLE AS SELECT或者INSERT INTO 命令来查询外部表数据。默认情况下,如果数据包含错误,整个命令会失败并且数据不会被装载到目标数据库表中。

SEGMENT REJECT LIMIT子句允许用户隔离外部表数据中的格式错误并且继续装载正确格式的行。使用SEGMENT REJECT LIMIT设置一个错误阈值,就可以指定拒绝限制计数为ROWS的数量(默认)或者全部行的一个PERCENT(1-100)。

如果错误行的数量达到SEGMENT REJECT LIMIT,整个外部表操作会被中止并且不会有行被处理。错误行的限制是针对每个Segment的,而不针对整个操作。如果错误行的数量没有达到SEGMENT REJECT LIMIT,该操作处理所有好的行并且抛弃错误的行,也可以选择把错误行的格式错误记录下来。

LOG ERRORS子句允许用户保留错误行以便进一步的检查。关于LOG ERRORS子句的信息,请见Greenplum数据库参考指南中的CREATE EXTERNAL TABLE命令。

若用户设置了SEGMENT REJECT LIMIT,Greenplum以单行错误隔离模式扫描外部数据。单行错误隔离模式适用于外部数据行有如多出或者缺少属性、属性数据类型错误或者非法客户端编码序列等格式错误的情况。Greenplum不会检查约束错误,但是用户可以通过在运行时限制外部表的SELECT来过滤约束错误。例如,要消除重复键错误:

  1. =# INSERT INTO table_with_pkeys
  2. SELECT DISTINCT * FROM external_table;

Note: 在用COPY命令或者外部表装载数据时,服务器配置参数gp_initial_bad_row_limit的值限制最开始的没有被正确格式化的行的数量。默认是如果前1000行都包含格式化错误,则停止处理。关于该参数的信息请见Greenplum数据库参考指南。

Parent topic: 装载和卸载数据