数据库版本:KingbaseES V008R006C008B0014


简介

    sys_bulkload 是 kingbase 快速将 CSV 文件导入数据库的命令行工具,它支持串行和并行的方式,是目前导入数据最快的工具。

        

文章目录如下

1. 基础语法

1.1. 语法说明

1.2. 参数选项

1.3. 配置文件

2. 常见用法

2.1. 导入数据基本用法

2.2. 导出数据基本用法

2.3. 性能最快导入导出


        

1. 基础语法

1.1. 语法说明

sys_bulkload 有2种导入、导出数据的方式:

一、将配置文件存入某个文件直接使用

sys_bulkload -U 用户名 -d 库名 -p 端口号 [配置文件]

二、将所有参数写到同一命令行

sys_bulkload -U 用户名 -d 库名 -p 端口号 [配置参数xxx]

        

1.2. 参数选项

加载选项

-i <name>:导入时表示"文件路径",导出时表示"表名"
-O <name>:导入时表示"表名",导出时表示"文件路径"
-l <file>:输出的日志文件
-P <file>:记录无法正确解析的日志
-o <option>:命令行时使用配置文件中的参数
-E:设置输出的日志级别(默认:INFO):DEBUG/INFO/NOTICE/WARNING/ERROR/LOG/FATAL/PANIC

连接选项

-h:指定主机IP
-d:指定库名
-p:指定端口号
-U:指定用户名
-W:指定交互输入密码

        

1.3. 配置文件

必选参数

# 导入配置
WRITER = [BUFFERED | DIRECT]  # 指定加载方式,DIRECT绕过redo日志,效率最高;BUFFERED通过共享缓冲区加载(默认)
TYPE = [CSV | TEXT | BINARY]  # 指定导入的文本格式:csv、text、二进制格式
INPUT = [file_path]           # 源格式,导入的源就是文件
OUTPUT = [table_name]         # 目标格式,导入的目标就是某张表
LOGFILE = [log_file]          # 记录日志的文件

# 导出配置
TYPE = DB             # 导出的格式为DB
INPUT = [table_name]  # 源格式,导出的源就是数据库
OUTPUT = [file_path]  # 目标格式,导出的目标就是文件
LOGFILE = [log_file]  # 记录日志的文件
WRITER = CSV_FILE     # 以csv格式导出到文件中

可选参数

PROCESSOR_COUNT = [num]             # 指定并行数(默认:1),根据cpu数设定,二进制格式不支持
SKIP_LAST_EMPTY_VALUE = [YES | NO]  # 忽略最后一列分隔符(默认:NO),只对csv格式有效
DELIMITER = ","                     # 指定分隔符(默认:逗号)
SPECIFY_COLUMN = <col1>,<col2>      # 指定导入的字段
SKIP = [num]                        # 导入时跳过多少行(默认:0),只对csv、text格式有效

TRUNCATE = [YES | NO]               # 删除目标表中的数据(默认:NO),并行和导出不支持
LIMIT = [num]                       # 导入的最大行数(默认不限制),最大 (2^64)/2-1
PARSE_ERRORS = [num]                # 运行出现错误的次数(默认:0),-1表示不限制
DUPLICATE_BADFILE = [file_path]     # 无法导入的数据追加到指定文件
ENCODING = [encoding]               # 指定输入数据的编码格式

        

2. 常见用法

在导入或导出数据前,需要连接ksql创建插件:

CREATE EXTENSION sys_bulkload;

        

2.1. 导入数据基本用法

一、将配置文件存入某个文件直接使用

编写文件 file.ctl,写入如下内容:

WRITER = BUFFERED    # 加载方式
TYPE = CSV           # csv格式文件
INPUT = /home/yt/file.csv   # 源文件路径
OUTPUT = t1          # 表名
LOGFILE = ./t1.log   # 日志路径

执行导入命令

sys_bulkload -U [用户名] -d [库名] -p [端口号] ./file.ctl

        

二、将所有参数写到同一命令行

sys_bulkload -U [用户名] -d [库名] -p [端口号] \
    -O t1 \                # 表名
    -i /home/yt/file.csv \ # 源文件
    -o WRITER=BUFFERED \   # 加载格式
    -o TYPE=CSV            # 文件类型
  • 注意:-o 后面的参数,等于符号不要带空格。比如 -o TYPE = CSV 会出错

        

2.2. 导出数据基本用法

一、将配置文件存入某个文件直接使用

编写文件 file.ctl,写入如下内容:

WRITER = CSV_FILE          # 加载方式
TYPE = DB                  # 数据库格式
INPUT = t1                 # 源表名
OUTPUT = /home/yt/file.csv # 导出文件
LOGFILE = ./t1.log         # 日志路径

执行导出命令

sys_bulkload -U [用户名] -d [库名] -p [端口号] ./file.ctl

        

二、将所有参数写到同一命令行

sys_bulkload -U [用户名] -d [库名] -p [端口号] \
    -O /home/yt/file.csv \ # 文件路径
    -i t1 \                # 表名
    -o WRITER=CSV_FILE \   # 加载格式
    -o TYPE=DB             # 文件类型
  • 注意:-o 后面的参数,等于符号不要带空格。比如 -o TYPE = DB 会出错

        

2.3. 性能最快导入导出

提高导入导出的方式是使用并行,cpu有多少就使用多少并行:

PROCESSOR_COUNT = 并行数

导入导出都可使用并行提升性能,导入还可以使用DIRECT加载方式(绕过redo日志)性能更快。

导入示例:

PROCESSOR_COUNT = 8        # 使用8个并行
WRITER = DIRECT            # 加载方式
TYPE = CSV                 # csv格式文件
INPUT = /home/yt/file.csv  # 源文件路径
OUTPUT = t1                # 表名
LOGFILE = ./t1.log         # 日志路径

导出示例:

PROCESSOR_COUNT = 8        # 使用8个并行
WRITER = CSV_FILE          # 加载方式
TYPE = DB                  # 数据库格式
INPUT = t1                 # 源表名
OUTPUT = /home/yt/file.csv # 导出文件
LOGFILE = ./t1.log         # 日志路径

        

目录2.1基本用法方式导入1000w行数据(16s)

使用高性能导入1000w行(3s)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐