一、关于sys_bulkload数据加载工具

sys_bulkload是KingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。使用前需要用户手动创建sys_bulkload插件,需要说明的是sys_bulkload工具是随数据库版本一同发布的,使用时请使用对应发布的数据库版本,其他数据版本则不保证能正常工作。

sys_bulkload使用请参考:

https://help.kingbase.com.cn/v8/admin/reference/ref-client/bulkload.html?highlight=sys_bulkload

二、使用sys_bulkload加载数据:

1. 导入命令:

sys_bulkload -i /home/webuer/F_CM.dat -O wzh.F_CM -l ./test_load.log -o "TYPE=TEXT" -H10.10.10.10 -Uwzh -Wwzh -dwzh

2. 错误信息:

sys_bulkload 3.1.15 on 2023-03-09 14:19:21.213938+08
INPUT = /home/webuser/F_CM.dat
LIMIT = INFINITE
PARSE_ERRORS = 0
CHECK_CONSTRAINTS = NO
TYPE = CSV
SKIP = 0
DELIMITER = ,
QUOTE = "\""
ESCAPE = "\""
NULL =
SPECIFY_COLUMN =
OUTPUT = wzh.f_cm
ASYNC_WRITE = NO
REINDEX = YES
VERBOSE = NO
WRITE = BUFFERED
DUPLICATE_ERRORS = 0
ON_DUPLICATE_KEEP = NEW
TRUNCATE = NO Parse eroor Record 1:Input Record 1:Rejected - column 1. missing data for column "farendma"
Maximum parse error count execeded - 1 error(s) found in input file 0 Rows skipped.
0 Rows successfully loaded.
1 Rows not loaded due to parse errors.
0 Rows not loaded due to dulicate errors.
0 Rows replaced with new rows. Run began on 2023-03-09 14:19:21.213938+08
Run ended on 2023-03-09 14:19:21.215044+08 CPU 0.00s/0.00u sec elapsed 0.00 sec
NOTICE: BULK LOAD END
0 Rows skipped.
0 Rows successfully loaded.
1 Rows not loaded due to parse errors.
0 Rows not loaded due to dulicate errors.
0 Rows replaced with new rows.
log path: /home/webuser/test_load.log
parse srror path: /home/webuser/F_CM.bad
duplicate error path: /home/webuser/F_CM.dupbad
ctrl file path:
data file path: /home/webuser/F_CM.bad
Run began on 2023-03-09 14:19:21.213938+08
Run ended on 2023-03-09 14:19:21.215044+08
WARNING: some rows were not loaded due to errors.

通过错误信息可以看到,在parse阶段就发生错误。

三、原因分析:

在parse节点数据发生解析错误,最大可能是数据分隔符识别有问题:

经沟通,原始数据是通过ociuldr工具进行导出,分隔符使用十六进制(0X03)进行数据分隔。

查看原数据:

1. linux系统:

$ cat F_CM.bad
2020-08-269779WD0005688022200001118022110001支付虚拟柜员666112018051680003509999999990000001200011121100012020051615111590451131
$ more F_CM.bad
2020-08-269779WD0005688022200001118022110001支付虚拟柜员666112018051680003509999999990000001200011121100012020051615111590451131
$ less F_CM.bad
2020-08-26^C9779^CWD0005^C688022^C200001^C118022^C110001^C支付虚拟柜员^C6^C66^C^C1^C1^C20180516^C^C^C^C8^C0^C^C0^C^C^C0^C3^C5^C0^C999999999^C^C0^C^C^C0^C0^C^C^C0^C0^C^C^C0^C^C1^C^C2^C^C0^C^C^C001112^C110001^C20200516^C1511159045113^C1
$ vim F_CM.bad
2020-08-26^C9779^CWD0005^C688022^C200001^C118022^C110001^C支付虚拟柜员^C6^C66^C^C1^C1^C20180516^C^C^C^C8^C0^C^C0^C^C^C0^C3^C5^C0^C999999999^C^C0^C^C^C0^C0^C^C^C0^C0^C^C^C0^C^C1^C^C2^C^C0^C^C^C001112^C110001^C20200516^C1511159045113^C1

在服务器通过cat、more命令查看数据,cat、more命令会自动把乱码部分处理了,数据可以正常显示但是不能识别分隔符。

在服务器使用less、vim命令查看原数据文件,发现部分数据不能正常显示。

2. windows系统:

文本打开:

nodepat++打开:

至此,基本确定sys_bulkload工具不能正确识别分隔符导致解析错误。

四、解决问题:

既然分隔符使用十六进制(0x03)作为分隔符,可以尝试将原数据转换为十六进制查看。

1. 将原数据转换为十六进制:

$ hexdump -C F_CM.bad
00000000 ef bb bf 32 30 32 30 2d 30 38 2d 32 36 03 39 37 |...2020-08-26.97|
00000010 37 39 03 57 44 30 30 30 35 03 36 38 38 30 32 32 |79.WD0005.688022|
00000020 03 32 30 30 30 30 31 03 31 31 38 30 32 32 03 31 |.200001.118022.1|
00000030 31 30 30 30 31 03 e6 94 af e4 bb 98 e8 99 9a e6 |10001...........|
00000040 8b 9f e6 9f 9c e5 91 98 03 36 03 36 36 03 03 31 |.........6.66..1|
00000050 03 31 03 32 30 31 38 30 35 31 36 03 03 03 03 38 |.1.20180516....8|
00000060 03 30 03 03 30 03 03 03 30 03 33 03 35 03 30 03 |.0..0...0.3.5.0.|
00000070 39 39 39 39 39 39 39 39 39 03 03 30 03 03 03 30 |999999999..0...0|
00000080 03 30 03 03 03 30 03 30 03 03 03 30 03 03 31 03 |.0...0.0...0..1.|
00000090 03 32 03 03 30 03 03 03 30 30 31 31 31 32 03 31 |.2..0...001112.1|
000000a0 31 30 30 30 31 03 32 30 32 30 30 35 31 36 03 31 |10001.20200516.1|
000000b0 35 31 31 31 35 39 30 34 35 31 31 33 03 31 0a |511159045113.1.|
000000bf

将原数据转换为十六进制后,数据显示正常,分隔符0x03也可以正常显示。

2. 替换原数据分隔符(0x03)为0x7c(|)分隔符:

sed替换分隔符:

sed -i  's/\x03/\x7c/g' F_CM.bad

查看文件:

$ cat F_CM.bad
2020-08-26|9779|WD0005|688022|200001|118022|110001|支付虚拟柜员|6|66||1|1|20180516||||8|0||0|||0|3|5|0|999999999||0|||0|0|||0|0|||0||1||2||0|||001112|110001|20200516|1511159045113|1
$ more F_CM.bad
2020-08-26|9779|WD0005|688022|200001|118022|110001|支付虚拟柜员|6|66||1|1|20180516||||8|0||0|||0|3|5|0|999999999||0|||0|0|||0|0|||0||1||2||0|||001112|110001|20200516|1511159045113|1
$ less F_CM.bad
2020-08-26|9779|WD0005|688022|200001|118022|110001|支付虚拟柜员|6|66||1|1|20180516||||8|0||0|||0|3|5|0|999999999||0|||0|0|||0|0|||0||1||2||0|||001112|110001|20200516|1511159045113|1
$ vim F_CM.bad
2020-08-26|9779|WD0005|688022|200001|118022|110001|支付虚拟柜员|6|66||1|1|20180516||||8|0||0|||0|3|5|0|999999999||0|||0|0|||0|0|||0||1||2||0|||001112|110001|20200516|1511159045113|1

替换完成后,数据、分隔符均可以正常显示。

再次使用sys_bulkload工具进行导入,可以正常导入。问题解决。

注意:sys_bulkload数据加载工具目前不支持十六进制分隔符

KingbaseES sys_bulkload数据加载工具错误处理的更多相关文章

  1. PostgreSQL数据加载工具之pg_bulkload

    1. 介绍 PostgreSQL提供了一个copy命令的便利数据加载工具,copy命令源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载.pg_bulkload ...

  2. KingbaseES批量数据加载的实践技巧

    有时,KingbaseES数据库需要在单个或最少的步骤中导入大量数据,这通常称为批量数据导入.其中数据源通常是一个或多个大文件,这个过程有时可能非常慢. 造成性能不佳的原因有很多:索引.触发器.外键. ...

  3. GreenPlum数据加载

    1. copy命令 对于数据加载,GreenPlum数据库提供copy工具,copy工具源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载.使用copy命令进行 ...

  4. Android Volley和Gson实现网络数据加载

    Android Volley和Gson实现网络数据加载 先看接口 1 升级接口 http://s.meibeike.com/mcloud/ota/cloudService POST请求 参数列表如下 ...

  5. MPP 二、Greenplum数据加载

    Loading external data into greenplum database table using different ways... Greenplum 有常规的COPY加载方法,有 ...

  6. DICOM:DICOM三大开源库对比分析之“数据加载”

    背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,“只要Sante DICOM Editor打不开的数据,基 ...

  7. flask+sqlite3+echarts3+ajax 异步数据加载

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  8. Entity Framework关联查询以及数据加载(延迟加载,预加载)

    数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...

  9. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

  10. Echarts通过Ajax实现动态数据加载

    Echarts(3.x版)官网实例的数据都是静态的,实际使用中往往会要求从服务器端取数据进行动态显示,官网教程里给出的异步数据加载很粗略,下面就以官网最简单的实例为例子,详细演示如下过程:1.客户端通 ...

随机推荐

  1. Java并发编程实例--12.使用线程工厂创建线程

    工厂模式是面向对象编程世界中最有用的设计模式. 它是一个创新型的模式,目标是开发一个对象,这个对象的任务是去创建其他类对象. 这样一来,如果我们想创建某些类的对象就不需要使用new关键字.好处有以下几 ...

  2. golang常用库:操作数据库的orm框架-gorm基本使用

    golang常用库:gorilla/mux-http路由库使用 golang常用库:配置文件解析库/管理工具-viper使用 golang常用库:操作数据库的orm框架-gorm基本使用 golang ...

  3. redis7源码分析:redis 多线程模型解析

    多线程模式中,在main函数中会执行InitServerLast void InitServerLast() { bioInit(); // 关键一步, 这里启动了多条线程,用于执行命令,redis起 ...

  4. python列表操作的大O效率

  5. [软件工程] CMMI是什么?

    序 能力成熟度模型集成(CMMI) 一.CMMI(能力成熟度模型集成)概述 CMMI是由美国软件工程学会(software engineering institue,简称SEI)制定的一套专门针对软件 ...

  6. The OCaml Language Cheatsheets

    The OCaml Language Cheatsheets OCaml v.4.08.1 Syntax Implementations are in .ml files, interfaces ar ...

  7. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  8. 【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题

    问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢? 问题回答 一:关于Azure cache for Redis服务在数据传输过程中是如何加密的? 为了确保在A ...

  9. python爬虫中文转成一个字符串类型的unicode字符串(%u)的问题

    本文主要介绍某些爬虫在遇到%u627E%u4E0A%u95E8这种类似unicode编码的str类型数据时,无法直接使用decode('unicode-escape')方法来转成中文时的一个转码的解决 ...

  10. C1. Good Subarrays (Easy Version)

    思路:我们枚举每一个左端点,对于每一个左端点,寻找最长的满足条件的区间,这个区间长度就是左端点对答案的贡献,可以发现具有单调性,右端点只会前进不会倒退.所以我们两个指针各扫一遍区间就可以. #incl ...