Sys_Bulkload 工具使用
一、介绍
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 工具使用的更多相关文章
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- .NetCore中的日志(2)集成第三方日志工具
.NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...
- CorelDRAW X8 如何破解激活(附国际版安装包+激活工具) 2016-12-15
之前有位搞平面的好友“小瘦”说CDR X8无法破解,只能用X7.呃……呃……呃……好像是的 其实CDR8难激活主要在于一个点“没有离线激活了,只可以在线激活”,逆天不是专供逆向的,当然没能力去破解,这 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
随机推荐
- easyui combobox重复渲染问题
当一个页面有两个easyui combobox存在时,并且同时给两个combobox赋相同值,某些easyui的版本会导致其中一个无法切换选项. 解决办法,分两步赋值,可解决问题
- bat-注册表
注册表 注册表就像于是配置文件 linux下一切皆文件,windows下一切皆注册表 注册表(各种配置文件:系统设置.用户设置.软件的配置) HKEY_CLASSES_ROOT 超级管理员.系 ...
- 【计算机系统基础1】gdb、gcc简易使用指南
目录 1. 基本实验工具的使用 1.1GCC 在IA-32+LINUX平台 基本的GCC 命令 一些其他选项 1.2objdump 1.3gdb 启动gdb 调试工具 设置断点 启动程序运行 查看程序 ...
- 异常注意事项_多异常的捕获处理和异常注意事项_finally有return语句
异常注意事项_多异常的捕获处理 多个异常使用捕获又该如何处理呢? 1. 多个异常分别处理 2. 多个异常一次捕获,多次处理 3. 多个异常一次捕获一次处理 public class Demo01Exc ...
- Java8 函数式【1】:一文读懂逆变
Java8 函数式[1]:一文读懂逆变 禁止转载 pure function 协变 逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说: 不就是传一个方法吗,语法糖! lambda ...
- 2019 CSP-J 初赛解析
题面,成绩不是真实水平,就挑重点说一说 老师给的解析 T5 这是二分查找,属于是我的代码理解不太对 我的理解 #include<iostream> using namespace std; ...
- HTTPS 如何保证数据传输安全
引言 为什么把这个作为选题. 大概也是2年前,我的同事,在面试某宇宙大厂遇到的问题与我一起探讨.这个时候我发现,虽然TLS(https)这个东西大部分时候可能不会被直接用到,但很容易被作为考察的目标范 ...
- Collection集合和Collection的常用功能
boolean add(E e); 向集合里添加元素 boolean remove(E e); 删除集合中的某个元素 void clear(); 清空集合的所有元素 boolean contains( ...
- YII学习总结1
YII 安装(2.0 advanced) 以下借鉴别人的博文 http://www.jb51.net/article/54055.htm 今天终于搞明白怎么安装Yii2了.对于我这种小白来说真是费尽 ...
- 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_217 在开发过程中,我们会经常面临的一个常见问题是如何正确管理外部资源,比如数据库.锁或者网络连接.稍不留意,程序将永久保留这些资 ...