csv列中的字符串存在逗号,obloader导入报错Cause: The number of columns parsed does not match the number of columns in the table

【 使用环境 】测试环境
【 OB or 其他组件 】ob-loader-dumper-4.3.3.1
【 使用版本 】ob-loader-dumper-4.3.3.1
【问题描述】csv列中的字符串存在逗号,obloader导入报错Cause: The number of columns parsed does not match the number of columns in the table
发现
image

【附件及日志】
[root@ob logs]# head /root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv
“ID”,“OPER_TYPE”,“A_NE_ID”,“A_NE_CODE”,“B_NE_ID”,“B_NE_CODE”,“STAFF_NO”,“OPER_TIME”,“HOSTNAME”,“IP_ADDRESS”,“REMARK”,“OLD_A_NE_ID”,“OLD_A_NE_CODE”,“OLD_B_NE_ID”,“OLD_B_NE_CODE”,“A_NE_TYPE”,“B_NE_TYPE”,“SUBSTATION_ID”,“OPER_SOURCE”,“ONU_ID”,“ONU_CODE”,“OLD_ONU_ID”,“OLD_ONU_CODE”
“5657011445”,UPDATE,“2510094424”,ODN23号2单元-H02-2J,“2510611070”,OTB-23号2-1-2,SJMXL,2021-02-08 09:43:23,DESKTOP-KHHUV1M,“192.168.136.1”,“NEW IFREAL:0, OLD IFREAL:0”,“2613181707”,ODN-小区1(115巷3号)-01,“2510611070”,OTB-23号2-1-2,“2”,“3”,“42634735”,8,

[root@ob logs]# /root/ob-loader-dumper-4.3.3.1-RELEASE/bin/obloader -h 192.168.207.18 -P 2881 -u test -t lnzyob -p xxxxxx --csv -f /root/csv2/ --skip-header --table ‘AN_LOGIC_CONN_LOG’ --column-separator ‘,’ --column-delimiter ‘"’ --escape-character ‘,’
2025-06-13 16:12:47 [INFO] Parsed args:
[–csv] true
[–file-path] /root/csv2/
[–escape-character] ,
[–column-delimiter] "
[–skip-header] true
[–host] 192.168.207.18
[–port] 2881
[–user] test
[–tenant] lnzyob
[–password] ******
[–sys-user] root
[–table] [AN_LOGIC_CONN_LOG]

2025-06-13 16:12:47 [WARN] The Java version (1.8.0_221) you are currently using is not recommended. Recommended range: [1.8.0_300, 9.0.0)
2025-06-13 16:12:48 [INFO] Log files will be written to /root/csv2/logs
2025-06-13 16:12:48 [INFO] Trying to establish JDBC connection to test@lnzyob
2025-06-13 16:12:49 [INFO] Server Mode: OBORACLE-4.2.5.3
2025-06-13 16:12:49 [INFO] Manifest has been saved to “/root/csv2/.MANIFEST.bin”
2025-06-13 16:12:49 [INFO] Querying table column metadata, this might take a while…
2025-06-13 16:12:49 [INFO] Listing all matched data files in dest path…
2025-06-13 16:12:49 [INFO] Binding table: “AN_LOGIC_CONN_LOG” to file: “file:/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” finished
2025-06-13 16:12:49 [INFO] Cannot find a binding for “file:/root/csv2/data/test/TABLE/JYC.csv”, ignore it
2025-06-13 16:12:49 [INFO] Find 1 data files in: “/root/csv2/” success. Elapsed: 20.81 ms
2025-06-13 16:12:49 [INFO] Splitting data files into 64 MB logical chunks…
2025-06-13 16:12:49 [INFO] Split 1 data files to 1 logical chunks success. Elapsed: 32.84 ms
2025-06-13 16:12:49 [INFO] Bootstrap with Max Heap: 3 GB, Safe Heap: 3.12 GB
2025-06-13 16:12:49 [INFO] Querying primary/unique constraints metadata for data replacing…
2025-06-13 16:12:49 [INFO] Query table entry for table: “AN_LOGIC_CONN_LOG” finished. Remain: 0
2025-06-13 16:12:49 [INFO] Query leader location of table: “AN_LOGIC_CONN_LOG” finished. Remain: 0
2025-06-13 16:12:49 [INFO] Waiting to calculate leader for 1 subfiles…
2025-06-13 16:12:49 [INFO] Waiting to refresh observer load status…
2025-06-13 16:12:49 [INFO] Create 1024 slots for ring buffer finished. [192.168.207.18:2881]
2025-06-13 16:12:49 [INFO] Start 32 database writer threads finished. [192.168.207.18:2881]
2025-06-13 16:12:49 [INFO] Start 32 record file reader threads success
2025-06-13 16:12:50 [INFO] File: “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” has been parsed finished
2025-06-13 16:12:50 [WARN] Failed to load 240 records from “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” into table “test”.“AN_LOGIC_CONN_LOG”. Check “ob-loader-dumper.bad” and “ob-loader-dumper.discard” for details
2025-06-13 16:12:50 [ERROR] Error: Failed to load 240 records from “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” into table “test”.“AN_LOGIC_CONN_LOG”. Check “ob-loader-dumper.bad” and “ob-loader-dumper.discard” for details
2025-06-13 16:12:50 [INFO] ---------- Finished Tasks: 1 Running Tasks: 0 Progress: 100.00% ----------
2025-06-13 16:12:50 [INFO]

All Load Tasks Finished:


    No.#        |        Type        |             Name             |            Count             |       Status       

     1          |       TABLE        |      AN_LOGIC_CONN_LOG       |          669 -> 429          |      FAILURE       

Total Count: 429 End Time: 2025-06-13 16:12:50

2025-06-13 16:12:50 [INFO] Load record finished. Total Elapsed: 1.545 s
2025-06-13 16:12:50 [ERROR] System exit 1
[root@ob logs]# more ob-loader-dumper.bad
INSERT INTO “AN_LOGIC_CONN_LOG” (“ID”,“OPER_TYPE”,“A_NE_ID”,“A_NE_CODE”,“B_NE_ID”,“B_NE_CODE”,“STAFF_NO”,“OPER_TIME”,“HOSTNAME”,“IP_ADDRESS”,“REMARK”,“OLD_A_NE_ID”,“OLD_A_NE_CODE”,“OLD_B_NE_ID”,“OLD_B_NE_CODE”,“A_NE_TYPE”,“B_
NE_TYPE”,“SUBSTATION_ID”,“OPER_SOURCE”,“ONU_ID”,“ONU_CODE”,“OLD_ONU_ID”,“OLD_ONU_CODE”)VALUES (’“5657011445”’,‘UPDATE’,’“2510094424”’,‘ODN23号2单元-H02-2J’,’“2510611070”’,‘OTB-23号2-1
-2’,‘SJMXL’,‘2021-02-08 09:43:23’,‘DESKTOP-KHHUV1M’,’“192.168.136.1”’,’“NEW IFREAL:0’,'OLD IFREAL:0”’,’“2613181707”’,‘ODN-小区1(115巷3号)-01’,’“2510611070”’,‘OTB-23号2-1-2’,’“2”’,’“3”’,’“426
34735”’,‘8’,’’,’’,’’,’’);
Cause: The number of columns parsed does not match the number of columns in the table

[root@ob logs]# /root/ob-loader-dumper-4.3.3.1-RELEASE/bin/obloader -h 192.168.207.18 -P 2881 -u test -t lnzyob -p xxxxxx --csv -f /root/csv2/ --skip-header --table ‘AN_LOGIC_CONN_LOG’
2025-06-13 16:14:04 [INFO] Parsed args:
[–csv] true
[–file-path] /root/csv2/
[–skip-header] true
[–host] 192.168.207.18
[–port] 2881
[–user] test
[–tenant] lnzyob
[–password] ******
[–sys-user] root
[–table] [AN_LOGIC_CONN_LOG]

2025-06-13 16:14:04 [WARN] The Java version (1.8.0_221) you are currently using is not recommended. Recommended range: [1.8.0_300, 9.0.0)
2025-06-13 16:14:05 [INFO] Log files will be written to /root/csv2/logs
2025-06-13 16:14:05 [INFO] Trying to establish JDBC connection to test@lnzyob
2025-06-13 16:14:05 [INFO] Server Mode: OBORACLE-4.2.5.3
2025-06-13 16:14:05 [INFO] Manifest has been saved to “/root/csv2/.MANIFEST.bin”
2025-06-13 16:14:05 [INFO] Querying table column metadata, this might take a while…
2025-06-13 16:14:06 [INFO] Listing all matched data files in dest path…
2025-06-13 16:14:06 [INFO] Binding table: “AN_LOGIC_CONN_LOG” to file: “file:/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” finished
2025-06-13 16:14:06 [INFO] Cannot find a binding for “file:/root/csv2/data/test/TABLE/JYC.csv”, ignore it
2025-06-13 16:14:06 [INFO] Find 1 data files in: “/root/csv2/” success. Elapsed: 17.19 ms
2025-06-13 16:14:06 [INFO] Splitting data files into 64 MB logical chunks…
2025-06-13 16:14:06 [INFO] Split 1 data files to 1 logical chunks success. Elapsed: 28.83 ms
2025-06-13 16:14:06 [INFO] Bootstrap with Max Heap: 3 GB, Safe Heap: 3.12 GB
2025-06-13 16:14:06 [INFO] Querying primary/unique constraints metadata for data replacing…
2025-06-13 16:14:06 [INFO] Query table entry for table: “AN_LOGIC_CONN_LOG” finished. Remain: 0
2025-06-13 16:14:06 [INFO] Query leader location of table: “AN_LOGIC_CONN_LOG” finished. Remain: 0
2025-06-13 16:14:06 [INFO] Waiting to calculate leader for 1 subfiles…
2025-06-13 16:14:06 [INFO] Waiting to refresh observer load status…
2025-06-13 16:14:06 [INFO] Create 1024 slots for ring buffer finished. [192.168.207.18:2881]
2025-06-13 16:14:06 [INFO] Start 32 database writer threads finished. [192.168.207.18:2881]
2025-06-13 16:14:06 [INFO] Start 32 record file reader threads success
2025-06-13 16:14:06 [INFO] File: “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” has been parsed finished
2025-06-13 16:14:06 [WARN] Failed to load 240 records from “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” into table “test”.“AN_LOGIC_CONN_LOG”. Check “ob-loader-dumper.bad” and “ob-loader-dumper.discard” for details
2025-06-13 16:14:07 [ERROR] Error: Failed to load 240 records from “/root/csv2/AN_LOGIC_CONN_LOG.202506130930.csv” into table “test”.“AN_LOGIC_CONN_LOG”. Check “ob-loader-dumper.bad” and “ob-loader-dumper.discard” for details
2025-06-13 16:14:07 [INFO] ---------- Finished Tasks: 1 Running Tasks: 0 Progress: 100.00% ----------
2025-06-13 16:14:07 [INFO]

All Load Tasks Finished:


    No.#        |        Type        |             Name             |            Count             |       Status       

     1          |       TABLE        |      AN_LOGIC_CONN_LOG       |          669 -> 429          |      FAILURE       

Total Count: 429 End Time: 2025-06-13 16:14:07

2025-06-13 16:14:07 [INFO] Load record finished. Total Elapsed: 1.471 s
2025-06-13 16:14:07 [ERROR] System exit 1
[root@ob logs]# head ob-loader-dumper.bad
INSERT INTO “AN_LOGIC_CONN_LOG” (“ID”,“OPER_TYPE”,“A_NE_ID”,“A_NE_CODE”,“B_NE_ID”,“B_NE_CODE”,“STAFF_NO”,“OPER_TIME”,“HOSTNAME”,“IP_ADDRESS”,“REMARK”,“OLD_A_NE_ID”,“OLD_A_NE_CODE”,“OLD_B_NE_ID”,“OLD_B_NE_CODE”,“A_NE_TYPE”,“B_NE_TYPE”,“SUBSTATION_ID”,“OPER_SOURCE”,“ONU_ID”,“ONU_CODE”,“OLD_ONU_ID”,“OLD_ONU_CODE”)VALUES (’“5657011445”’,‘UPDATE’,’“2510094424”’,‘ODN23号2单元-H02-2J’,’“2510611070”’,‘OTB-23号2-1-2’,‘SJMXL’,‘2021-02-08 09:43:23’,‘DESKTOP-KHHUV1M’,’“192.168.136.1”’,’“NEW IFREAL:0’,'OLD IFREAL:0”’,’“2613181707”’,‘ODN-小区1(115巷3号)-01’,’“2510611070”’,‘OTB-23号2-1-2’,’“2”’,’“3”’,’“42634735”’,‘8’,’’,’’,’’,’’);
Cause: The number of columns parsed does not match the number of columns in the table
[root@ob logs]#
[root@ob logs]#
根据文档:https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002781923


怎么添加参数指定都没有解决,怀疑是工具存在bug,请高手指导,谢谢!

1 个赞

@jieguo 看这个csv 是 “”,"","“格式的,是需要指定–column-delimiter '”’ 为双引号,但这里的bad记录数据中包含双引号,貌似生效的是单引号,这里两个可能,一个双引号的指定没生效,二个是日志未清理混淆了。麻烦清理下日志,重新跑一遍包含–column-delimiter ‘"’ 的命令,然后再截图我们分析下呢

2 个赞

[root@ob logs]# /root/ob-loader-dumper-4.3.3.1-RELEASE/bin/obloader -h 192.168.207.18 -P 2881 -u test -t lnzyob -p xxxxxx --csv -f /root/csv2/ --skip-header --table ‘AN_LOGIC_CONN_LOG’ --column-separator ‘,’ --column-delimiter ‘"’ --escape-character ‘,’
语法上我看到没有什么问题,可以把这个命令放入到notepad++.visual studio code 等工具中去识别,看看是不是双引号,单引号变为中文的符号,从而导致出现问题!

1 个赞