一、关于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. 微信小程序获取本日、本周、本月、本年时间段

    原文链接 https://cslaoxu.vip/110.html 说明 最近需要用到统计不同时间段内的记录数,所以找了一下现成的工具类.下面就演示一下如何引用到实际项目中. 详细用法请参考:http ...

  2. Auxiliary Set题解

    F Auxiliary Set 树上LCA + DFS 注意一下输出格式! #include<bits/stdc++.h> using namespace std; const int N ...

  3. win32 - 创建带有标准阴影的无边框窗口

    这个框框好像删不掉,就先放这边吧...   #define WIN32_LEAN_AND_MEAN #include <unknwn.h> #include <windows.h&g ...

  4. 学习go语言编程之函数

    函数定义 函数的基本组成:关键字func,函数名,参数列表,返回值,函数体,返回语句. 示例如下: func Add(a int, b int) (ret int, err error) { if a ...

  5. CentOS8安装Geant4笔记(二):CentOS8安装Qt5.15.2并测试运行环境

    前言   在服务器CentOs8.2上安装geant4软件,但是运行不起来,所以本节开始主要是安装qt,测试qt基本功能.   要点   添加qt环境到系统环境中,是geant4启动qt的必要条件. ...

  6. go语言变量的零值和nil

    Go语言中无论是全局变量还是局部变量,只要定义了一个变量都有默认的0值 int/int8/int16/int32/int64/uint/uint8/uint16/uint32/uint64/byte/ ...

  7. 微服务程序运行步骤及nameko入门案例

    首先一个微服务应用程序需要有服务的生产者和服务的消费者,另外还需要一个注册中心来管理和调度服务 1.服务提供方,即生产者启动服务,并将服务提交到注册中心注册服务 2.服务需求方,即消费者连接到注册中心 ...

  8. ASP.NET Core 应用(SignalR)发布到 IIS 报错(HTTP Error 500.19 - Internal Server Error)

    参考资料: ASP.NET Core SignalR 入门 将 ASP.NET Core 应用发布到 IIS Download .NET Core 报错信息: HTTP Error 500.19 - ...

  9. 【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.

    问题描述 Spring Cloud Azure 4.0 调用 Key Vault 的代码中,没有找到设置 authority-host 的配置项,导致认证出现错误 Caused by: com.mic ...

  10. 【Azure 事件中心】在Windows系统中使用 kafka-consumer-groups.bat 查看Event Hub中kafka的consumer groups信息

    问题描述 使用 Apache Flink 连接支持 Apache Kafka的Azure Event Hub后,由于消费端的Consumer Group是动态创建,在门户页面和Service Bus ...