
# 数据存在错误时的导入操作指南
数据导入过程中的容错处理机制提供两种可选模式。
#### 智能修正模式（自适应入库）
- 处理原则：以数据完整性优先，通过智能修正确保最大程度的数据入库。
- 适用场景：导入数据中出现列数异常（冗余列）以及字符异常的情况。
- 处理流程：
  1. 处理列数异常（冗余列截断）。
  
  2. 进行字符集转码与非法字符清洗。
  
  3. 完整写入目标数据库。
   
- 输出结果：修正后的数据集。字符异常的情况会有GaussDB日志记录。
 
#### 严格校验模式（精准入库）
- 处理原则：以数据准确性优先，确保入库数据的绝对合规性。
- 适用场景：在医疗记录、金融交易等对数据精度要求极高的领域，若担心智能修正模式在导入数据时自动修正会影响数据准确性，可采用此模式。
- 处理流程：
  1. 执行多级校验（列数异常、字符异常、数据类型转换异常及约束冲突异常）。
  
  2. 生成错误诊断报告（含行号、错误类型、错误数据）。
  
  3. 建立错误数据隔离区。
  
  4. 仅通过校验的原始数据直接入库。
   
- 输出结果：纯净数据集以及错误明细报告（通过pg_catalog.pgxc_copy_error_log查看）。
- 容错级别：适用于智能修正模式处理的所有异常，如多列、缺列、废弃列、数据类型转换错误、字段超长、转码异常等。具体使用方法如下：
  ```
  --当导入数据过程中出现数据类型错误的次数不超过 100 次时，导入不会报错，会继续导入下一行。若超过 100 次，则正常报错。错误数据的详情及行号会记录在gs_copy_error_log表中。
  gaussdb=# COPY test_copy FROM '/home/omm/temp/test.csv' log errors reject LIMIT '100' CSV;
  --相较于上条语句，下面这条会在gs_copy_error_log中额外记录错误行的完整数据，在无数据安全风险的场景下推荐使用。该语句需要系统管理员权限。
  gaussdb=# copy test_copy from '/home/omm/temp/test.csv' log errors data reject limit '100' csv;
  ```
  
 
#### 总结
智能修正模式与严格校验模式可以结合使用，且智能修正模式具有优先级。在进行COPY导入时，若已明确指定对数据异常采用智能修正，那么该行数据的处理将不会触发严格校验模式。这意味着错误表不会记录相应数据，同时也不会扣除reject limit次数。建议用户根据自身实际情况，权衡是否自动修正列异常与字符异常后入库，还是直接舍弃。
