VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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
WRITER = DIRECT
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
  • PATH:表示源端为服务器中的文件(path支持文件名通配符)。
  • STDIN:表示vb_bulkload将通过网络从vb_bulkload客户端程序的标准输入读取数据。
  • 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 控制是否在导入报错时清理本次导入数据。
  • YES
  • NO (默认值)
  • SET_COMMITTED 指定在加载数据时是否每次插入都应该发出一个事务提交。
  • YES:每个数据行插入后都会立即发出一个事务提交指令。
  • NO (默认值):加载完整个数据文件后才会提交事务。
  • AIO 是否开启异步IO。
  • YES
  • NO (默认值)
  • COL 指定列的映射关系,它允许将数据文件中的字段映射到数据库表的列,从左到右定义包括类型名称,偏移量和长度(以字节为单位)。 -
    PRESERVE_BLANKS 控制数据加载过程中是否保留文本字段中的空格。
  • YES
  • NO (默认值)
  • 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)