文档中心
v3.4

运维管理

数据导出工具

sdbexprt 是 SequoiaDB 巨杉数据库的数据导出工具,用于将 SequoiaDB 中的集合数据以 JSON 或 CSV 格式导出到指定文件中。该工具支持将单集合数据导出至数据文件,也支持同时将多集合数据导出至数据目录。

语法规则

sdbexprt <options>

导出说明

JSON

JSON 导出格式中的 JSON 记录符合 JSON 的定义,以左右花括号作为 JSON 记录的分界符,并且字符串类型的数据必须包含在两个双引号之间,转义字符为反斜杠“\”。默认情况下(SequoiaDB)记录以换行符分隔,用户能够指定记录分隔符。

CSV

CSV(Comma Separated Values)导出格式以逗号分隔数值。默认情况下记录以换行符分隔,字段以逗号分隔。用户能够指定字符串分隔符、字段分隔符以及记录分隔符。

分隔符

类型 默认值
字符串分隔符 "(双引号)
字段分隔符 ,(逗号)
记录分隔符 '\n'(换行符)

Note:

  • 可以使用 UTF-8 字符作为分隔符;
  • 可以使用多个字符作为分隔符;
  • 可以使用 ASCII 码中的不可见字符作为分隔符,通过转义字符“\”输入 ASCII 码的十进制数值(0~127),例如“\30”。回车符、换行符、制表符、转义字符“\”可以直接使用“\r”、“\n”、“\t”、“\\”。

参数说明

通用参数

任何类型的导出操作均可指定如下参数:

参数名 缩写 描述
--help -h 显示帮助信息
--version 显示版本信息
--hosts 指定主机地址(hostname:svcname),用“,”分隔多个地址,默认值为 localhost:11810
--user -u 指定数据库用户名
--password -w 指定数据库密码,指定值则使用明文输入,不指定值则命令行提示输入
--cipher 是否使用密文模式输入密码,默认为 false,不使用密文模式输入密码,关于密文模式的介绍可参考密码管理
--token 指定加密令牌
--cipherfile 指定密文文件路径,默认为 ~/sequoiadb/passwd
--delrecord -r 指定记录分隔符,默认是'\n'
--type 指定导出数据格式,为 csv 或 json,默认为 csv
--filelimit 指定单个导出文件的大小上限,单位可以为 k、K、M、m、G、g、T 或 t,默认值为 16G
当导出文件将超过限制时,会切分为多个文件,具有编号后缀,如 file.csvfile.csv.1file.csv.2
--fields 指定导出集合的字段,该选项可以指定多次以指定多个导出集合的字段
格式为 [csName.clName:][field1[,...]],当确定只导出一个集合时,可以仅指定字段列表 [field1[,...]]
--withid 强制导出或者在配置文件中生成字段时,是否包含 _id 字段
当 type 为 json 时,默认为 true,包含 _id 字段;当 type 为 csv 时,默认为 false ,不包含 _id 字段
--floatfmt 指定浮点数格式,默认是 '%.16g',输入 'db2' 表示 '%+.14E',其他格式 %[+][.precision](f|e|E|g|G)
--ssl 指定是否使用 SSL 连接,默认 false,不使用 SSL 连接
--replace 覆盖导出数据文件

单集合参数

导出单个集合时,可以指定如下参数:

选项 缩写 说明
--csname -c 导出数据的集合空间名
--clname -l 导出数据的集合名
--file 导出的文件名
--select 选择规则,例如:--select '{ age:"", address:{$trim:1} }'
不能和选项 --fields 同时使用
--filter 导出过滤条件,例如:--filter '{ age: 18 }'
--sort 导出数据排序条件,例如:--sort '{ name: 1 }'
--skip 指定从第几条记录开始导出,默认是 0
--limit 指定导出的记录数,默认值为 -1 (导出所有记录)

Note:

导出单集合时,--select 和 --fields 选项具有一样的作用,但 --select 选项更加灵活。

多集合参数

同时导出多个集合时,可以指定如下参数:

参数名 缩写 描述
--cscl 导出的若干个导出集合或集合空间,多个名称使用逗号分隔,如 --cscl cs1,cs2.cla
--excludecscl 不包含的集合或集合空间,类似 --cscl
--dir 导出的目录,导出的每一个集合对应目录中的同名文件,如 sample.employee.csv

Note:

  • 导出工具支持单集合导出和多集合批量导出,单集合选项只能用于导出一个集合,但具有更灵活的导出条件选项,如过滤、排序。
  • 当不指定导出任何集合或者集合空间,即 -c、-l、--cscl 都不指定,则导出数据库中所有的集合。

JSON 参数

导出类型为 JSON 时,可以指定如下参数:

参数名 缩写 描述
--strict 是否严格按照数据类型导出,默认值为 false,不严格按照数据类型导出

CSV 参数

导出类型为 CSV 时,可以指定如下参数:

参数名 缩写 描述
--delchar -a 字符分隔符,默认值为双引号' " '
--delfield -e 字段分隔符,默认值为逗号','
--included 是否导出字段名到文件首行,默认值为 true,导出字段名到文件首行
--includebinary 是否导出完整二进制数据,默认值为 false,不导出完整二进制数据
--includeregex 是否导出完整的正则表达式,默认值为 false,不导出完整的正则表达式
--force 对于导出 csv 格式,每个集合必须指定对应的字段,否则不允许导出;
--force 选项可以强制导出,未指定字段的集合默认为第一行记录中除了 _id 以外的字段
--kicknull 是否踢掉 null 值,默认为 false
true:输出空字符
false:输出 null
--checkdelimeter 是否严格校验分隔符,默认为 true
true:禁止字符分隔符、字段分隔符、记录分隔符互相包含;
false:允许字符分隔符、字段分隔符、记录分隔符互相包含。

配置文件参数

在导出多集合数据时,必须使用参数 --fields 对每一个集合指定导出字段,操作比较繁琐。为此,sdbexprt 工具提供生成配置文件的功能,可以根据各集合所包含的字段自动生成 fields 作为导出条件。用户使用参数 --genconf 生成配置文件后,可直接通过配置文件指定导出行为,便于多次执行相似的命令。

参数名 缩写 描述
--genconf 指定一个配置文件名,将当前命令行中所指定的选项和值按照“键=值”的方式写入到配置文件,不执行导出工作
--genfields 生成配置文件时,是否对每一个集合生成对应的 --fields 选项,默认值为 true,工具会对每一个集合生成对应的 --fields 选项
--conf 指定一个配置文件作为输入

Note:

当使用配置文件的选项和命令行选项一样时,优先选择命令行值。

返回值

用户执行相关命令后,返回 0 则表示执行成功,返回非 0 则表示执行失败。

常见场景

以 CSV 格式导出

  • 将集合 sample.employee 的数据导出至 sample.employee.csv 文件中,并指定导出字段 name、fieldNotExist 和 age

    $ sdbexprt --hosts "localhost:11810" --type csv --file sample.employee.csv --fields name,fieldNotExist,age -c sample -l employee

    由于集合中不存在字段 fieldNotExist,导出的 sample.employee.csv 内容如下:

    name,fieldNotExist,age
    "Jack",,18
    "Mike",,20
    "Woody",,25
  • 将集合空间 sample 中除 sample.employee 外的所有集合数据,强制导出至 ./exportpath 目录中

    $sdbexprt --hosts "localhost:11810" --cscl sample --excludecscl sample.employee --dir ./exportpath --force true
  • 将集合 company.manager 和集合空间 sample 包含的所有集合数据,强制导出至 ./exportpath 目录中

    $sdbexprt --hosts "localhost:11810" --cscl sample,company.manager --dir ./exportpath --force true

以 JSON 格式导出

  • 将集合 sample.employee 的数据导出至 sample.employee.json 文件中

    $ sdbexprt --hosts "localhost:11810" --type json -c sample -l employee --file sample.employee.json

    导出的 sample.employee.json 内容如下:

    { "_id": { "$oid": "61f13fd6f91cfd7250f8775c" }, "id": 1, "name": "Jack", "age": 18 }
    { "_id": { "$oid": "61f13fd6f91cfd7250f8775d" }, "id": 2, "name": "Mike", "age": 20 }
    { "_id": { "$oid": "61f13fd7f91cfd7250f8775e" }, "id": 3, "name": "Woody", "age": 25 }
  • 将数据库中除集合空间 sample 和集合 company.manager 以外的所有集合数据,导出至 ./exportpath 目录中

    $ sdbexprt --hosts "localhost:11810" --type json --excludecscl sample,company.manager --dir ./exportpath

使用配置文件导出

  1. 根据指定的导出条件,生成配置文件 export.conf

    $ sdbexprt --hosts "localhost:11810" --dir ./exportpath --cscl sample,company.manager --excludecscl sample.employee --genconf export.conf

    配置文件内容如下:

    hosts = localhost:11810
    ...
    cscl = sample,company.manager
    excludecscl = sample.employee
    dir = exportpath/
    fields = sample.people:id,name,age
    fields = sample.member:id,name,age
    fields = company.manager:id,name,age
  2. 通过该配置文件执行导出

    $ sdbexprt --conf export.conf
回到顶部