金仓数据库KingbaseES sys_bulkload
关键字:
sys_bulkload、人大金仓、KingbaseES、
sys_bulkload简介
sys_bulkload是kingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。使用前需要用户手动创建sys_bulkload插件。
2.sys_bulkload的使用
sys_bulkload [option] [control_file_path] |
2.1 option参数
1.加载选项
(1)指定待加载文件或需要导出数据的表,同配置文件的INPUT选项。
-i in_file --input in_file |
(2)快速加载的目标表或者接收导出数据的文件路径,同配置文件的OUTPUT选项。
-O output_table --output output_table |
(3)结果日志路径,同配置文件中的LOGFILE选项。
-l log_file --logfile log_file |
(4)记录无法正确解析或写失败的日志路径,同配置文件的PARSE_BADFILE选项。
-P bad_file --parse-badfile bad_file |
(5)重建索引时与唯一性约束冲突而导入失败的记录的写入路径,同配置文件中的DUPLICATE_BADFILE选项。
-u duplicate_badfile --duplicate-badfile duplicate_badfile |
(6)任何在配置文件中任何可使用的选项,参见 配置文件 。可以传入多次选项。对于加载的必填选项如input, output等,为指定参数的方便和简洁已在上面提供了单独长短项配置。
-o optional --option optional |
2.连接选项
(1)指定连接的数据库。如未指定,数据库名将从环境变量KINGBASE_DATABASE中读取。如未设置该环境变量,使用连接的用户名。
-d dbname --dbname dbname |
(2)指定运行服务器的主机名。如果值以/开始,被用作unix域套接字的目录。
-h host --host host |
(3)指定TCP的端口号或者本地unix域套接字文件扩展名的服务器监听端口号。
-p port --port port |
(4)指定连接的用户名。
-U username --username username |
(5)连接用户的数据库登录密码。 需要说明的是-W 后面必须指定密码,否则会报错。
-W password --password password |
3.一般选项
(1)输出发送给服务器的命令。
-e --echo |
(2)设置输出信息的级别,其中级别包括:DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC。默认为INFO。
-E --elevel |
(3)输出帮助信息
--help |
(4)输出版本号
--version |
(5)指定配置文件的路径。配置文件写法参见配置文件
control_file_path参数 |
2.2使用说明
快速加载工具sys_bulkload可以通过短选项、长选项、配置文件三种方式来指定配置加载选项。由于加载的选项比较多,并且一些加载选项的信息比较固定和反复使用,可以把这些加载选项配置在配置文件中,直接指定配置文件的路径。配置加载选项规则如下:
- 启动参数的短选项和长选项是等价的。
- 在启动参数选项中仍然可以指定配置文件中配置的加载选项,其作用主要是临时替换配置文件的选项,以避免去修改配置文件中的选项,配置文件和启动参数同时指定则以启动参数指定为准。
- 如果使用启动参数则需要注意input,output,logfile,parse_badfile,duplicate_badfile不能多次指定,否则报错:specified only once。其他选项可以多次指定,并且以后指定的选项为准。
2.3配置文件
配置文件中包含了加载数据时所需要的一些配置。导入时只需要将配置文件的路径 + 文件名作为参数传入快速加载提供的系统函数或可执行程序即可。
- 配置文件中必填参数:
(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”时可用。
OUTPUT = [schema_name.] table_name | PATH |
●[schema_name.] table_name:导入数据的表名。在“ TYPE = CSV | TEXT | BINARY ”时可用。
●PATH:导出数据的文件路径。如果是相对路径,在控制文件中指定时,它将与控制文件相同;当在命令行参数中指定时,相对于当前工作目录。KingbaseES服务器的用户必须具有该文件的读取权限。仅在“TYPE = DB”时可用。
(3)LOGFILE = PATH: 指定一个文件记录日志。如果指定为相对路径,则指定规则与INPUT相同。
2.配置文件中非必填参数
(1)指定数据的加载方式,默认值是BUFFERED
WRITER = BUFFERED | CSV_FILE |
●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:指定输入数据的编码格式,检查指定的编码格式是否合法。默认不检查。若有需要,转化输入文件的格式为数据库的编码格式。如果可以确保输入文件格式与数据库格式一致,不指定该选项,会有助于加载速度的提高,因为会忽略字符集的检查和转化。非不填参数还有其它的等等。
3.配置文件示例:
配置文件中的选项不区分大小写,每个选项占用一行,选项和选项值之间通过等号进行连接,选项的值可以有引号也可以没有引号。如果字符串中有空格、等号等特殊值,则必须加引号。可以通过在正文内容前加入“#”表示注释该行后面的配置。具体格式如下:
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 |
3.sys_bulkload的示例
1.使用配置文件导出数据示例:
(1)初始化mysql模式的数据库:
./initdb -U system -D data1 -A trust -m mysql vim data1/kingbase.conf,在shared_preload_libraries中添加sys_bulkload |
(2)创建sys_bulkload插件和表并插入数据
create extension sys_bulkload; create table student (id int primary key, age int); insert into student select id, (random()*100)::integer as age from generate_series(1,100000) as id; |
(3)output.ctl
PROCESSOR_count=4 DELIMITER="," LOGFILE=/home/zhangjing/B2/bin/output.log TYPE=DB INPUT=STUDENT OUTPUT=/home/zhangjing/B2/bin/STUDENT.csv WRITER=CSV_FILE |
(4)执行导出命令
./sys_bulkload -U system -p 52323 -d test output.ctl |
导出成功:
2.使用配置文件导入数据示例:
(1)创建导入数据库表:
create table student1 (id int primary key, age int); |
(2)数据文件,将数据保存在STUDENT.CSV文件中,保存在数据库Bin目录:
(3)input.ctl配置文件信息:
PROCESSOR_count=4 DELIMITER="," LOGFILE=/home/zhangjing/B2/bin/input.log DELIMITER="," TYPE=CSV INPUT=/home/zhangjing/B2/bin/STUDENT.csv OUTPUT=STUDENT1 |
(4)执行导入命令:
./sys_bulkload -U system -p 52323 -d test input.ctl |
导入成功: