SequoiaDB 巨杉数据库支持使用 sdbimprt 工具,快速导入 CSV 或 JSON 格式的数据。用户可通过该工具将以下数据导入 SequoiaDB 集群中:
下述将根据数据的格式分别介绍数据导入的具体操作步骤。示例中均以 localhost:11810
作为导入的目标集群协调节点地址,sample.employee 作为导入的目标集合,“sdbadmin”作为数据库用户名,及 ~/sequoiadb/passwd
作为用户密码对应的密文文件路径。
CSV(Comma-Separated Values)是数据库间通用的数据交换格式之一,其文件以纯文本的形式存储表格数据。默认情况下记录间以换行符(\n)分隔,字段间以逗号(,)分隔。CSV 格式定义可以参考 RFC 4180 文档。
Note:
在导入数据前,用户需要确保 CSV 文件的编码格式为 UTF-8。
将文件 test.csv
中的数据通过协调节点导入至集合 sample.employee 中
$ sdbimprt --hosts "localhost:11810" --type csv --file test.csv -c sample -l employee --headerline true
批量导入可分为导入整个数据目录和导入多个目录的数据文件。
导入数据目录
待导入的数据目录 /opt/data
中,所有 CSV 格式的数据文件均已存在字段定义
id,name,age,identity,phone_number,email,country 1,"Jack",18,"student","18921222226","jack@example.com","China" 2,"Mike",20,"student","18923244255","mike@example.com","USA" 3,"Woody",25,"worker","18945253245","woody@example.com","China"
将目录 /opt/data
中的数据导入集合中,并通过参数 --headerline 指定文件首行作为字段定义
$ sdbimprt --hosts "localhost:11810" --type csv -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --file /opt/data --headerline true
导入多个数据文件
待导入的数据文件包括 /opt/data1.csv
、/opt/data2.csv
和 /opt/test/data3.csv
,各文件包含的内容如下:
data1.csv 存在如下数据: 1,"Jack",18 2,"Mike",20 3,"Woody",25 ··· data2.csv 存在如下数据: 101,"Alice",28 102,"Mary",37 103,"Helen",19 ··· data3.csv 存在如下数据: 201,"Nancy",83 202,"Mary",62 203,"Eva",22 ···
将数据导入集合中,并通过参数 --fields 指定字段定义
$ sdbimprt --hosts "localhost:11810" --type csv -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --file /opt/data1.csv,/opt/data2.csv,/opt/test/data3.csv --fields 'id long,name string default "Anonymous",age int'
Note:
- 参数 --fields 语法为 fieldName [type [default
], ...]。不填入 type 时,系统将自动判断字段的数据类型。 - 参数 --file 支持指定多个文件或者目录,使用逗号(,)分隔,重复出现的文件会被忽略。
在导入文件的数据量较大时,用户可以增加每次导入的记录数(对应参数 -n)以及导入连接数(对应参数 -j),以提升导入效率。
$ sdbimprt --hosts "localhost:11810" --type csv -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --file /opt/data --headerline true -n 5000 -j 6
CSV 格式中,默认以逗号(,)作为字段分隔符。当用户数据文件的分隔符与默认值不符时,可以在导入时通过参数 --delfield 自定义分隔符,避免导入操作报错。
待导入的数据文件 /opt/data4.csv
中存在以下数据,其中字段分隔符为"|":
1|"Jack"|18|"student"|"18921222226"|"jack@example.com"|"China" 2|"Mike"|20|"student"|"18923244255"|"mike@example.com"|"USA" 3|"Woody"|25|"worker"|"18945253245"|"woody@example.com"|"China"
将数据文件 data4.csv
中的数据导入集合中,并通过参数 --delfield 自定义字段分隔符为"|"
$ sdbimprt --hosts "localhost:11810" --type csv -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --fields 'id long,name string default "Anonymous",age int,identity,phone_number,email,country' --delfield "|" --file /opt/data4.csv
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在 JSON 文件中,记录间需以左右花括号分隔,字符串类型的数据需包含在两个双引号("")之间。当字符串类型的数据包含特殊字符时,需要使用反斜杠(\)进行转义。
将文件 test.json
中的数据通过协调节点导入至集合 sample.employee 中
$ sdbimprt --hosts "localhost:11810" --type json --file test.json -c sample -l employee
批量导入可分为导入整个数据目录和导入多个不同目录的数据文件。
导入数据目录
将数据目录 /opt/data
中的数据导入集合中
$ sdbimprt --hosts "localhost:11810" --type json -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --dir /opt/data
导入多个数据文件
将数据文件 /opt/data1.json
、/opt/data2.json
和 /opt/test/data3.json
导入集合中
$ sdbimprt --hosts "localhost:11810" --type json -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --file /opt/data1.json,/opt/data2.json,/opt/test/data3.json
Note:
参数 --file 支持指定多个文件或者目录,使用逗号(,)分隔,重复出现的文件会被忽略。
在导入文件的数据量较大时,用户可以增加每次导入的记录数(对应参数 -n)和导入连接数(对应参数 -j),以提升导入效率。
$ sdbimprt --hosts "localhost:11810" --type json -c sample -l employee --user sdbadmin --cipher true --cipherfile ~/sequoiadb/passwd --file /opt/data -n 5000 -j 6