一、介绍

sys_bulkload是KingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。

使用前需要用户手动创建sys_bulkload插件,需要说明的是sys_bulkload工具是随数据库版本一同发布的,使用时请使用对应发布的数据库版本,其他数据版本则不保证能正常工作。

create extension sys_bulkload;

二、架构图

sys_bulkload主要包括两个模块:reader和writer。reader负责读取文件、解析tuple,writer负责把解析出的tuple写入输出源中。

三、sys_bulkload参数

sys_bulkload可以通过短选项、长选项、配置文件三种方式来指定配置加载选项。由于加载的选项比较多,并且一些加载选项的信息比较固定和反复使用,可以把这些加载选项配置在配置文件中,命令行直接指定配置文件的路径。配置加载选项规则如下:

1. 启动参数的短选项和长选项是等价的。

2. 在启动参数选项中仍然可以指定配置文件中配置的加载选项,其作用主要是临时替换配置文件的选项,以避免去修改配置文件中的选项,配置文件和启动参数同时指定则以启动参数指定为准。

3. 如果使用启动参数则需要注意input,output,logfile,parse_badfile,duplicate_badfile不能多次指定,否则报错:specified only once。其他选项可以多次指定,并且以后指定的选项为准。

四、参数选项说明

1、必填参数:

1.TYPE = CSV | TEXT | BINARY | DB  加载的数据源的类型

CSV    从CSV格式的文本文件加载数据

TEXT       从TEXT格式的文本文件加载数据

BINARY 从二进制格式的文件加载数据

DB     从数据库的表中导出数据

2.INPUT = PATH | [schema_name.] table_name 需要导入的数据文件路径或者导出数据的源表

PATH 需要导入的数据源文件路径。如果是相对路径,在控制文件中指定时,它将与控制文件相对;当在命令行参数中指定时,相对于当前工作目录。KingbaseES服务器的用户必须具有该文件的读取权限。在“TYPE = CSV | TEXT | BINARY”时可用。

[schema_name.] table_name 需要导出数据的表名。仅在“TYPE = DB”时可用。

3.OUTPUT = [schema_name.] table_name | PATH 指定将数据导入的目标表或者目标文件。

[schema_name.] table_name 导入数据的表名。在“ TYPE = CSV | TEXT | BINARY ”时可用。

PATH 导出数据的文件路径。如果是相对路径,在控制文件中指定时,它将与控制文件相对;当在命令行参数中指定时,相对于当前工作目录。KingbaseES服务器的用户必须具有该文件的读取权限。仅在“TYPE = DB”时可用。

4.LOGFILE = PATH

指定一个文件记录日志。如果指定为相对路径,则指定规则与INPUT相同。默认值为$KINGBASE_DATA/sys_bulkload/<timestamp>_<dbname>_<schema>_<table>.log

2、非必填参数

1.WRITER = BUFFERED | CSV_FILE 指定数据的加载方式,默认值为 BUFFERED。

BUFFERED 通过共享缓冲区将数据加载到表中。使用共享缓冲区编写WAL日志,并可使用KingbaseES的WAL日志进行恢复。

CSV_FILE 当数据的加载方式指定为CSV_FILE时,表示将数据库中的数据导出到CSV格式的文本文件中,该参数一般与“TYPE = DB”配合使用。

2.LIMIT = n

LIMIT只在导入数据文件时有效,加载n行即停止加载。默认值为最大的64位整数(即(2^64)/2-1 = 9223372036854775807),当n为0或默认值时表示不限制加载行数。

3.ENCODING = encoding

指定输入数据的编码格式,检查指定的编码格式是否合法。默认不检查。若有需要转化输入文件的格式为数据库的编码格式。如果可以确保输入文件格式与数据库格式一致,不指定该选项,会有助于加载速度的提高,因为会忽略字符集的检查和转化。配置文件中ENCODING选项与数据库编码选项的转化关系详见 表 2-1 。

4.CHECK_CONSTRAINTS = YES | NO

指定加载时是否进行约束检查(只检查check约束),默认为NO。 注: 当前不支持分区约束检查,所以直接插入分区时需要保证数据正确。

5.PARSE_ERRORS = n

允许出现的错误次数。若错误次数超过该设置值,则快速加载退出运行。-1表示不限制错误个数,0为默认值,表示不允许错误,其他表示允许的错误次数。

6.FILTER = [schema_name.] function_name[(arg_value,...)]

只在导入数据文件时有效,指定过滤函数用来转换输入文件的每行,如果函数名在数据库中唯一,可以忽略函数的参数类型定义。如果该选项未指定,输入数据将直接被解析到目标表中。

7.DUPLICATE_ERRORS = n

允许违反唯一约束的忽略的元组个数。冲突的元组将从表中删除并被记录在重复失败的文件中。如果大于等于重复记录数,记录会被回滚。默认值为0,表示不允许重复记录数,-1表示忽略所有错误。BUFFERED模式不支持该参数,指定时会被忽略。

8.ON_DUPLICATE_KEEP = NEW | OLD

执行元组如何处理违反唯一约束。被删除的元组会被记录在出错文件中。设置了该选项,同样需要设置DUPLOCATE_ERRORS大于0。默认值为NEW。

NEW 采用输入文件中的最新一条记录的数据替换表中原有的数据。

OLD 保持表中原有数据,删除输入文件中的元组。

9.PARSE_BADFILE = PATH

指定一个文件路径(若指定路径的文件不存在则自动创建一个新文件),默认值与bulkload工具同目录,文件名为导入数据文件的文件名+”.bad”后缀的文件。保存数据文件中解析失败的数据行。若在数据文件解析的过程中解析失败,则该数据行追加记录到该文件。

10.DUPLICATE_BADFILE = PATH

指定一个文件路径(若指定路径的文件不存在则自动创建一个新文件),默认值与bulkload工具同目录,文件名为导入数据的文件名+”.dupbad”后缀的文件。若存在不能被写入到数据库的元组,则该元组对应的数据文件中的行追加记录到该文件。例如在数据导入过程中元组违背了约束(唯一,主键,非空,check)原则,则该元组不能写入+”.badf”后缀的文件路径。若在数据文件解析的过程中解析失败,则该数据行追加记录到该文件。

11.TRUNCATE = YES | NO

是否删除所有目标表中的数据,默认值为NO。多进程并行和TYPE为DB时不支持该选项。

12.VERBOSE = YES | NO

出错的元组是否写入到服务器日志中,默认值为NO。

13.DELIMITER = delimiter_character

间隔符,数据文件中列与列的间隔符,为单个字符,可以为任何可视化字符。默认值为逗号( , )。当需要一个TAB字符作为间隔符时,用双引号包裹TAB字符,如 DELIMITER = "" 。

14.QUOTE = quote_character

QUOTE在文件格式为CSV时有效,详情参考COPY语句。默认值为双引号( " )。

15.ESCAPE = escape_character

ESCAPE在文件格式为CSV时有效,详情参考COPY语句。默认值为反斜杠( \ )。

16.REINDEX = YES | NO 导入数据后是否重建索引。默认值为NO。

17.SKIP_LAST_EMPTY_VALUE = YES | NO

只对CSV格式有用,最后一列数据为空,是否把它当成一列数据,还是只是当分隔符。默认值为NO。用TPCH测试时生成的CSV文件在行末尾会加一个分隔符,指定该选项为YES,忽略最后一个分隔符。

18.SKIP = n

SKIP只在导入TEXT和CSV格式的数据文件时有效,TEXT和CSV格式的数据文件以行为单位进行导入,该选项可以设置跳过多少行数据,这些数据不导入数据库。默认值为0。

19.NULL = null_string 指定表示一个空值的字符串。默认值是一个没有引号的空字符串。

20.FORCE_NOT_NULL = column_name

该选项强制要求指定的列不为NULL值,默认情况下将空字符串按照NULL值处理,如果指定了该值,则空字符串不再按照NULL值处理,而是按照零长字符串处理。该选项不能与FILTER一起使用。

21.TRACKING_INTERVAL = n

指定导入过程中的时间间隔(单位为:秒),客户端反馈导入状况,防止在导入过程中因异常卡死,但用户不知道。默认为0,表示不反馈导入信息,其它非0整数为反馈时间间隔。

22.PROCESSOR_COUNT = n

指定服务器并行处理的进程数,具体参数值可根据用户服务器的CPU个数指定。默认值为1。TYPE为BIANRY方式不支持该参数,TYPE为DB方式时该参数恒为1。

processor_count > 1 only support in csv or db mode

23.ASYNC_WRITE = YES | NO

指定服务器的写文件是否独立的进程,默认值为NO。当WRITE为CSV_FILE时,如果PROCESSOR_COUNT大于1,则无论是否指定ASYNC_WRITE,其值始终为YES。

24.DUMP_PARAMS = YES | NO 是否将配置参数信息导入到日志文件中。默认值为YES。

25.SPECIFY_COLUMN = COLOUMNAME [FILTER | LLS],...

将数据加载到指定的列上, COLUMNAME为具体的列名; 列名之前使用“,”分隔, 如果列名包含逗号则需要使用单引号将列名括起来, 如果列名包含单引号则需要使用'\'进行转义, 例如列名为i,'d则写为'i,\'d'。FILTER表示跳过对应的列, LLS表示对应字段加载方式使用LOB location specify方式加载。

LLS方式,加载的内容不是文本本身所指的内容而是字段指定文件中的内容,对应的加载内容格式如下:

filename:offset:length

filename:为待加载的数据文件名,支持zip文件

offset:文件的偏移量

length:加载的数据量(字节数)

注意:

如果加载的数据文件为zip等压缩文件,length长度一般为整个文件大小,否则会导致加载数据不完整,导出后无法正常解压缩。另外如果加载的对象为CLOB,zip等压缩文件是含有\0可能加载过程中会造成数据截断,所以CLOB不建议采用zip压缩文件进行加载。

26.LOB_DIR = PATH LLS方式加载时,对应filename所对应文件所在的路径需要通过LOB_DIR指定。

27.CLIENT_LOB = TRUE | FALSE 远端LLS方式加载时,需要设置CLIENT_LOB = TRUE 默认值为FALSE。

28.SCHEMA_SAMEAS_USER = TRUE | FALSE

导入时INPUT参数可以指定[schema_name.] table_name, 如果对应用户只有一个与用户名相同的SCHEMA则可以设置SCHEMA_SAMEAS_USER=TRUE,这样可以不填写schema_name,bulkload会自动补全为username.table_name 这样做是为了兼容oracle

29.REMOTE_FILE = PATH 远端加载导入时,INPUT填写为stdin,待加载的数据文件可以通过REMOTE_FILE指定。

30.LIMIT 在导入CSV文件并且已知文件行数的情况下,设置LIMIT参数为导入文件的行数可提升导入速度。

31.REINDEX 若导入数据不需要建立索引,则将REINDEX参数设置为NO(默认值),可提升导入速度

32.PROCESSOR_COUNT 使用BUFFERED方式导入,可以根据当前物理环境合理配置PROCESSOR_COUNT参数优化导入速度。

配置文件中的选项不区分大小写,每个选项占用一行,选项和选项值之间通过等号进行连接,选项的值可以有引号也可以没有引号。如果字符串中有空格、等号等特殊值,则必须加引号。“#”表示注释该行后面的配置。具体格式如下:

PROCESSOR_COUNT =4
DELIMITER = "," # Delimiter
QUOTE = "\"" # Quoting character
LOGFILE =/home/bulkload.log
DUPLICATE_BADFIL=/home/bad.dat
TYPE=CSV
INPUT=/home/data.csv
OUTPUT=test_table

五、实例

1、导入数据示例

1、创建导入数据表

create table test(id int primary key, info text, crt_time timestamp);

数据文件示例:将下列数据以 test.csv 为文件名保存到KingbaseES服务器所在目录

1,29b35ff06c949e7e442c929e1df86396,2017-10-08 10:52:47.746062
2,06fde814525395de5ab85f6d92b04e87,2017-10-08 10:52:47.746573
3,c93f02e8677c9cd7c906c6ad5dbd450e,2017-10-08 10:52:47.746627
4,6541700070ae3d051f965fcef43baf45,2017-10-08 10:52:47.746835
5,3d7e7246016acaa842526b6614d0edf5,2017-10-08 10:52:47.746869
6,1d1ae5a03ef0bad3bc14cd5449ba0985,2017-10-08 10:52:47.746894
7,7745c57c54b97656bec80a502ec13ec7,2017-10-08 10:52:47.746918
8,3c377131f6ef82c3284dc77a3b4ffdf7,2017-10-08 10:52:47.746942
9,5ef98d40aeeadf65eb1f0d7fd86ed585,2017-10-08 10:52:47.746968
10,312c0a0188da9e34fe45aa19d0d07427,2017-10-08 10:52:47.746993 

2、导入数据

以 BUFFERED 方式导入 TEXT 文件

配置文件示例(以test.ctl为名保存到服务器所在目录,也可自行指定其他目录。)

output = test
INPUT = /home/kingbase/test.csv
TYPE = CSV
SKIP = 2
LIMIT = 5
WRITER = BUFFERED
PROCESSOR_COUNT = 3

  

3、使用配置文件导入命令示例

sys_bulkload -h localhost -d TEST /home/kingbase/test.ctl -U SYSTEM -W 123

使用配置文件导入结果

导入成功提示信息:

   NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
2 Rows skipped.
5 Rows successfully loaded.
0 Rows not loaded due to parse errors.
0 Rows not loaded due to duplicate errors.
0 Rows replaced with new rows.
log path: /opt/Kingbase/ES/V8/data/sys_bulkload/20211111161310_test_public_test.log
parse error path: /opt/Kingbase/ES/V8/data/sys_bulkload/20211111161310_test_public_test.prs.csv
duplicate error path: /opt/Kingbase/ES/V8/data/sys_bulkload/20211111161310_test_public_test.dup.csv

  

2、导出数据命令示例

sys_bulkload -d TEST -i TEST -O test_out.csv -o "TYPE=DB" -o

"WRITER=CSV_FILE" -o "DELIMITER=|" -h localhost -U SYSTEM -W 123

导出数据结果

导出成功提示信息:

    NOTICE: BULK LOAD START
NOTICE: BULK LOAD END
0 Rows skipped.
10 Rows successfully loaded.
0 Rows not loaded due to parse errors.
0 Rows not loaded due to duplicate errors.
0 Rows replaced with new rows.

  

导出结果查询:

cat test_out.csv
1|29b35ff06c949e7e442c929e1df86396|2017-10-08 10:52:47.746062
2|06fde814525395de5ab85f6d92b04e87|2017-10-08 10:52:47.746573
3|c93f02e8677c9cd7c906c6ad5dbd450e|2017-10-08 10:52:47.746627
4|6541700070ae3d051f965fcef43baf45|2017-10-08 10:52:47.746835
5|3d7e7246016acaa842526b6614d0edf5|2017-10-08 10:52:47.746869
6|1d1ae5a03ef0bad3bc14cd5449ba0985|2017-10-08 10:52:47.746894
7|7745c57c54b97656bec80a502ec13ec7|2017-10-08 10:52:47.746918
8|3c377131f6ef82c3284dc77a3b4ffdf7|2017-10-08 10:52:47.746942
9|5ef98d40aeeadf65eb1f0d7fd86ed585|2017-10-08 10:52:47.746968
10|312c0a0188da9e34fe45aa19d0d07427|2017-10-08 10:52:47.746993

  

Sys_Bulkload 工具使用的更多相关文章

  1. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  2. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  3. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  4. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  5. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  6. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  7. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  8. CorelDRAW X8 如何破解激活(附国际版安装包+激活工具) 2016-12-15

    之前有位搞平面的好友“小瘦”说CDR X8无法破解,只能用X7.呃……呃……呃……好像是的 其实CDR8难激活主要在于一个点“没有离线激活了,只可以在线激活”,逆天不是专供逆向的,当然没能力去破解,这 ...

  9. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

随机推荐

  1. easyui combobox重复渲染问题

    当一个页面有两个easyui combobox存在时,并且同时给两个combobox赋相同值,某些easyui的版本会导致其中一个无法切换选项. 解决办法,分两步赋值,可解决问题

  2. bat-注册表

    注册表 注册表就像于是配置文件 linux下一切皆文件,windows下一切皆注册表 注册表(各种配置文件:系统设置.用户设置.软件的配置) HKEY_CLASSES_ROOT     超级管理员.系 ...

  3. 【计算机系统基础1】gdb、gcc简易使用指南

    目录 1. 基本实验工具的使用 1.1GCC 在IA-32+LINUX平台 基本的GCC 命令 一些其他选项 1.2objdump 1.3gdb 启动gdb 调试工具 设置断点 启动程序运行 查看程序 ...

  4. 异常注意事项_多异常的捕获处理和异常注意事项_finally有return语句

    异常注意事项_多异常的捕获处理 多个异常使用捕获又该如何处理呢? 1. 多个异常分别处理 2. 多个异常一次捕获,多次处理 3. 多个异常一次捕获一次处理 public class Demo01Exc ...

  5. Java8 函数式【1】:一文读懂逆变

    Java8 函数式[1]:一文读懂逆变 禁止转载 pure function 协变 逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说: 不就是传一个方法吗,语法糖! lambda ...

  6. 2019 CSP-J 初赛解析

    题面,成绩不是真实水平,就挑重点说一说 老师给的解析 T5 这是二分查找,属于是我的代码理解不太对 我的理解 #include<iostream> using namespace std; ...

  7. HTTPS 如何保证数据传输安全

    引言 为什么把这个作为选题. 大概也是2年前,我的同事,在面试某宇宙大厂遇到的问题与我一起探讨.这个时候我发现,虽然TLS(https)这个东西大部分时候可能不会被直接用到,但很容易被作为考察的目标范 ...

  8. Collection集合和Collection的常用功能

    boolean add(E e); 向集合里添加元素 boolean remove(E e); 删除集合中的某个元素 void clear(); 清空集合的所有元素 boolean contains( ...

  9. YII学习总结1

    YII 安装(2.0 advanced) 以下借鉴别人的博文  http://www.jb51.net/article/54055.htm 今天终于搞明白怎么安装Yii2了.对于我这种小白来说真是费尽 ...

  10. 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_217 在开发过程中,我们会经常面临的一个常见问题是如何正确管理外部资源,比如数据库.锁或者网络连接.稍不留意,程序将永久保留这些资 ...