前言
处理导入错误¶
可读外部表最常被用来选择数据导入到普通数据库表中。用户使用CREATE TABLE AS SELECT
或者INSERT INTO
命令来查询外部表数据。默认情况下,如果数据包含错误,整个命令会失败并且数据不会被导入到目标数据库表中。
SEGMENT REJECT LIMIT
子句允许用户隔离外部表数据中的格式错误并且继续导入正确格式的行。使用SEGMENT REJECT
LIMIT
设置一个错误阈值,就可以指定拒绝限制计数为ROWS
的数量(默认)或者全部行的一个PERCENT
(1-100)。
如果错误行的数量达到SEGMENT REJECT
LIMIT
,整个外部表操作会被中止并且不会有行被处理。错误行的限制是针对每个executor的,而不针对整个操作。如果错误行的数量没有达到SEGMENT
REJECT LIMIT
,该操作处理所有好的行并且抛弃错误的行,也可以选择把错误行的格式错误记录下来。
LOG ERRORS
子句允许用户保留错误行以便进一步的检查。关于LOG
ERRORS
子句的信息,请见SeaboxMPP数据库参考指南中的CREATE
FOREIGN TABLE
命令。
若用户设置了SEGMENT REJECT
LIMIT
,SeaboxMPP以单行错误隔离模式扫描外部数据。单行错误隔离模式适用于外部数据行有如多出或者缺少属性、属性数据类型错误或者非法客户端编码序列等格式错误的情况。SeaboxMPP不会检查约束错误,但是用户可以通过在运行时限制外部表的SELECT
来过滤约束错误。例如,要消除重复键错误:
=### INSERT INTO table_with_pkeys
SELECT DISTINCT * FROM external_table;