LOAD DATA- 首行末尾字段为null时导入失败

【 使用环境 】测试环境
【 OB or 其他组件 】OceanBase
【 使用版本 】5.7.25-OceanBase_CE-v4.3.5.2 - Mysql租户
【问题描述】使用LOAD DATA语句导入文件数据,第一行最后一个字段如果为NULL会报列不匹配错误,无法导入

【复现路径】
建表语句:

CREATE TABLE test.load_test (
  column1 varchar(10)   COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段1',
  column2 varchar(100)   COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段2',
  column3 text          COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段3',
  column4 decimal(20,2) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段4',
  column5 varchar(10)   COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段5'
) COMMENT = '导入测试表';

有个test.txt文件,里面第一行数据最后一个字段为null,导入会报ERROR 1136 (21S01): Column count doesn’t match value count at row 1错误,数据以及命令如下:

aaa,bbb,ccc,1.1,
aaa,bbb,ccc,2.1,ddd

LOAD DATA /*+ direct(true,1) parallel(1) */ from files ( location = '/home/oceanbase/', format = ( type = 'csv', line_delimiter = '\n', field_delimiter = ',', parse_header = false, skip_blank_lines = true, EMPTY_FIELD_AS_NULL = true ), pattern = "test.txt" ) INTO TABLE test.load_test;

test1.txt文件第一行最后一个字段有值,后面的行无所谓,不会报错,数据以及命令如下:

aaa,bbb,ccc,2.1,ddd
aaa,bbb,ccc,1.1,

LOAD DATA /*+ direct(true,1) parallel(1) */ from files ( location = '/home/oceanbase/', format = ( type = 'csv', line_delimiter = '\n', field_delimiter = ',', parse_header = false, skip_blank_lines = true, EMPTY_FIELD_AS_NULL = true ), pattern = "test1.txt" ) INTO TABLE test.load_test;

4 个赞

txt文档的数据是这样的 会报错是么
aaa,bbb,ccc,1.1,
aaa,bbb,ccc,2.1,ddd
命令是这样的
LOAD DATA /*+ direct(true,1) parallel(1) */ from files ( location = ‘/home/oceanbase/’, format = ( type = ‘csv’, line_delimiter = ‘\n’, field_delimiter = ‘,’, parse_header = false, skip_blank_lines = true, EMPTY_FIELD_AS_NULL = true ), pattern = “test.txt” ) INTO TABLE test.load_test;

2 个赞

是的,这种情况下会报错

3 个赞

学习了

2 个赞

学习了学习了

2 个赞

这个报错符合预期 目前的设计就是这样的 设计的时候假设第一行数据是对的,第一行是对的,它就补齐了,第一行是错的就报错了

2 个赞
aaa,bbb,ccc,1.1,
aaa,bbb,ccc,2.1,ddd

关键是实际数据中很有可能像上面一样第一行的最后一个字段本身就是空的;这种不算数据有问题吧!这种数据有办法导入吗

再就是试了一下,在后面再第一行最后加个","(分隔符),这种反而能导入…

aaa,bbb,ccc,1.1,,
aaa,bbb,ccc,2.1,ddd
2 个赞

加个配置 IGNORE_LAST_EMPTY_COLUMN = false 试试

4 个赞

加上这个配置后导入成功了

3 个赞

学习了

2 个赞

学习了,学习了