sdbexprt 是 SequoiaDB 巨杉数据库的数据导出工具,用于将 SequoiaDB 中的集合数据以 JSON 或 CSV 格式导出到指定文件中。该工具支持将单集合数据导出至数据文件,也支持同时将多集合数据导出至数据目录。
sdbexprt <options>
JSON 导出格式中的 JSON 记录符合 JSON 的定义,以左右花括号作为 JSON 记录的分界符,并且字符串类型的数据必须包含在两个双引号之间,转义字符为反斜杠“\”。默认情况下(SequoiaDB)记录以换行符分隔,用户能够指定记录分隔符。
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.csv 、file.csv.1 、file.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 时,可以指定如下参数:
参数名 | 缩写 | 描述 |
---|---|---|
--strict | 是否严格按照数据类型导出,默认值为 false,不严格按照数据类型导出 |
导出类型为 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 则表示执行失败。
将集合 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
将集合 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
根据指定的导出条件,生成配置文件 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
通过该配置文件执行导出
$ sdbexprt --conf export.conf