vb_bulkload
功能描述
vb_bulkload是Vastbase提供的一款批量加载数据工具,使用该工具可以提升加载的效率和性能。相对于copy命令,它最大的优势是速度,它将跳过shared buffer和WAL buffer快速写入文件到数据库。
vb_bulkload还提供了出错清理功能:使用vb_bulkload工具导入出错之后,本次导入的数据都会进行回滚;即实现在导入报错时清理本次导入数据,防止这些数据被访问,造成查询、执行计划不准确等问题。
注意事项
- 使用此功能需提前安装vb_bulkload插件。
- vb_bulkload不支持ustore表格式。
语法格式
Dataload: vb_bulkload [dataload options] control_file_path
Recovery: vb_bulkload -r [-D DATADIR]
参数说明
以下内容仅列举Vastbase支持的参数选项。
加载选项
-i, --input=INPUT
指定加载的文件路径或需要导出数据的表,Vastbase仅支持path,stdin。与控制文件中的“INPUT”相同。
-i参数支持使用通配符,暂不支持使用正则表达式。
-O, --output=OUTPUT
指定加载的目标表或者接受到处数据的文件路径,Vastbase仅支持导入到表,与控制文件中的“OUTPUT”相同。
支持普通表和分区表,分区表仅支持range分区(包括二级range,list,hash分区)。
-o, --option=“key=val”
指定导入过程中的控制参数(任何可以在控制文件中使用的选项),详细参见控制文件。
对于加载的必填选项如input, output等,为了指定参数的方便和简洁已在上面提供了单独的参数
-i,-O
进行配置。
恢复选项
-r, --recovery
指定该选项执行恢复操作。
-D, --pgdata=DATADIR
数据库路径。
连接选项
-d,--dbname=DBNAME
指定要连接的数据库的名称。
-h, --host=HOSTNAME
指定运行服务器的计算机的主机名。如果值以斜杠开头,它将用作Unix域套接字的目录。
-p, --port=PORT
指定服务器在其上侦听连接的TCP端口或本地Unix域套接字文件扩展名。
-U, --username=USERNAME
指定要连接的用户名。
-w, --no-password
不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。
-W, --password
指定
-U
参数所指定的用户密码。
通用选项
-e, --echo
输出发送给服务器端的命令。
-E, --elevel=LEVEL
指定输出的消息的等级。
取值范围:DEBUG,INFO,NOTICE,WARNING,ERROR,LOG,FATAL和PANIC。
默认值:INFO
--help
打印帮助信息。
--version
查看该工具软件版本号。
控制文件
上面的参数-o
可以使用key=val
语法直接指定导入数据过程中的控制参数,这些key=val
键值对可以写入到控制文件中。
下面是可以放入控制文件中的内容:
TYPE = CSV | BINARY
INPUT = path | stdin|[schema_name.]table_name
OUTPUT | TABLE = [schema_name.]table_name
FILTER = [schema_name.]table_name
DELIMITER = deimiter_character
QUOTE = quote_character
ESCAPE = escape_character
NULL = null_string
FORCE_NOT_NULL = column
ERROR_RECOVERY = YES | NO
SET_COMMITTED = YES |NO
AIO = YES | NO
COL = type [ (size) ] [ NULLIF { 'null_string' | null_hex } ]
PRESERVE_BLANKS = YES | NO
STRIDE = n
OUT_TYPE=TABLE
NREADERS = n
NWRITERS = n
INDEX_WORKERS = n
DIRS = path
参数名 | 描述 | 取值范围 |
---|---|---|
TYPE | 输入数据的类型。 | Vastbase仅支持CSV(从CSV格式的文本文件加载数据),BINARY(从二进制文件里加载数据) 默认值:CSV |
INPUT | 加载数据的源文件。 | Vastbase仅支持PATH,STDIN |
WRITER | 加载数据的方法。 | Vastbase仅支持DIRECT,即直接把数据写入表中。 |
OUTPUT | 将数据加载到的目标端,即把数导到哪里,Vastbase仅支持导入到表。 | 具体的表名 |
FILTER | 指定过滤函数用来转换输入文件的每行,如果函数名在数据库中唯一,可以忽略函数的参数类型定义。如果该选项未指定,输入数据将直接被解析到目标表中。 | Vastbase仅支持datetime_format函数 |
DELIMITER | 用于分隔文件每行中的列。 | 单个ASCII字符,支持多字节字符。默认值为逗号。 |
QUOTE | 指定ASCII引号字符。 | ASCII引号字符。默认值为双引号。 |
ESCAPE | 指定应在QUOTE数据字符值之前出现的ASCII字符。 | ASCII字符。默认值为双引号。 |
NULL | 表示空值的字符串。 | 字符串。默认值是一个没有引号的空值。 |
FORCE_NOT_NULL | 处理每个指定的列,视为非NULL值,可根据需要提供多个列。 说明:此选项不能与FILTER一起使用。 |
列值。 |
ERROR_RECOVERY | 控制是否在导入报错时清理本次导入数据。 | |
SET_COMMITTED | 指定在加载数据时是否每次插入都应该发出一个事务提交。 | |
AIO | 是否开启异步IO。 | |
COL | 指定列的映射关系,它允许将数据文件中的字段映射到数据库表的列,从左到右定义包括类型名称,偏移量和长度(以字节为单位)。 | - |
PRESERVE_BLANKS | 控制数据加载过程中是否保留文本字段中的空格。 | |
STRIDE | 用于指定数据文件中每条记录的大小。 | - |
OUT_TYPE | 数据加载到的目标端,Vastbase仅支持TABLE。 | TABLE |
NREADERS | 读取线程数。 | - |
NWRITERS | 写分区线程数。 | - |
INDEX_WORKERS | 索引工作线程数。 | - |
DIRS | 指定含.loadstatus为后缀的文件目录。 | - |
使用说明
vb_bulkload工具可以通过短选项、长选项、控制文件三种方式来指定配置加载选项。由于加载的选项比较多,并且一些加载选项的信息比较固定和反复使用,可以把这些加载选项配置在控制文件中,直接指定控制文件的路径。
配置加载选项规则如下:
1、启动参数的短选项和长选项是等价的。
2、在启动参数选项中仍然可以指定控制文件中配置的加载选项,其作用主要是临时替换控制文件的选项,以避免去修改控制文件中的选项,控制文件和启动参数同时指定则以启动参数指定为准。
3、如果使用启动参数则需要注意:input,output不能多次指定。
使用示例
前置步骤: 创建vb_bulkload插件。
create extension vb_bulkload;
1、在vastbase数据库中创建目标表。
create table test1(id int primary key,col text);
2、创建导入文件。
vi bulkload.txt
插入如下内容:
1,张三
2,李四
3、创建控制文件。
vi bulkload.ctl
插入如下内容:
INPUT = /home/vb_210/bulkload.txt
TYPE = CSV
DELIMITER = ,
QUOTE = "\""
ESCAPE = "\""
OUTPUT = public.test1
ERROR_RECOVERY = YES
4、使用vb_bulkload导入数据。
直接指定参数。
vb_bulkload -i bulkload.txt -O test1 -d vastbase
使用控制文件。
vb_bulkload bulkload.ctl -d vastbase
显示均内容如下所示:
NOTICE: BULK LOAD START WARNING: vb_bulkload entered WARNING: start transaction 1626439 WARNING: try to register 5 bgworkers and actually succeed in 5 WARNING: bgworker threads 5 started, 0 hasn't started. WARNING: 5 bgworkers started WARNING: all bgworkers ready. WARNING: starting Source reader ... WARNING: #0 loading slice #0 of file #0 by thread #140461072709376(bucket #0) WARNING: starting TABLE/PARTITION writer ... WARNING: #1 writing thread #140460958807808(bucket #1) WARNING: #2 terminating thread #140460942026496(bucket #2) WARNING: #3 terminating thread #140460925245184(bucket #3) WARNING: #4 terminating thread #140461230114560(bucket #4) WARNING: 4.all thread start: 0.03 WARNING: thread #140461072709376 end loading, shutting it WARNING: all readers(1/1) end loading. WARNING: 5.all thread done: 0.00 WARNING: writing termination to queue. WARNING: waiting all sub-threads quit ... WARNING: 6.all thread close: 2.00 INFO: 0 Rows skipped. 2 Rows successfully loaded. INFO: Run began on 2023-04-19 14:34:07.494062+08 Run ended on 2023-04-19 14:34:09.528798+08 CPU 0.01s/0.00u sec elapsed 2.03 sec
5、进入数据库查询test1表中数据。
vsql -r -d vastbase
select * from test1;
返回结果如下,表示数据导入成功:
id | col
----+------
1 | 张三
2 | 李四
(2 rows)