IOTDB 的数据导入导出工具,导出的数据主要包含时间序列的结构和其对应的数据。
本项目分为两个子项目:backup-core和backup-command项目;
backup-core项目包含主要的业务逻辑和实现方法,该项目可以以jar包的形式对外提供服务。
backup-command项目是一个工具类包,功能实现依赖于核心项目,提供命令行工具。
前提:
- java >= 1.8, 需要配置JAVA_HOME环境变量
- Maven >= 3.6
你可以使用以下命令来编译或者打包这个项目:
mvn clean package;
mvn install;
mvn test;
ps: 使用 '-DskipTests' 来跳过测试用例
由于core-jar还没有放到远程仓库,为了顺利编译工具,首先需要执行mvn install -DskipTests。
集成测试需要一个真正的iotdbserver,你可以在“test/resource/sesseinConfig.properties”中配置服务器.
- 基于iotdb-session
- 基于pipeline的导入导出工具,容易扩展
-
pipeline设计文档: https://apache-iotdb.feishu.cn/wiki/wikcn8zaxOegcQ4vBASwtmbmE4f
-
- 基于project reactor框架,多轨道执行,支持背压机制
- 数据导出以设备为最小单元
- 数据导出以设备为最小单元,即一个设备对应一个文件,这个文件中包含这个设备的所有measurement数据,因为导出最小单元是设备,所以对应的路径最小应该是设备级别的路径。
- 可以导出一个或多个存储组的数据
- 保证时间序列结构一致性
- 可以保证导入导出过程中时间序列的结构不会改变,导出数据的时候可以选择是否导出时间序列的结构信息,这些信息会单独保存在一个文件中;里面详细的记录了时间序列的属性,各个字段的类型、压缩格式、是否是对齐时间序列等等,导入的时候根据这个文件创建对应的时间序列,保证时间序列结构不会变化。
- 支持增量/全量导出
- where参数支持选定时间范围,目前不支持非time的参数
- 支持超过1000个以上时间序列的导出
- 由于本工具是依赖于iotdb-session,而session查询是有限制的,一次性查询出的时间序列结果是不允许超过1000个的,本工具解决了这个问题,是查询结果中的时间序列大于1000也能正常导出。
- 核心功能提供jar包,方便第三方集成
- 丰富的导出格式:
- 可以查看的导出文件,提供sql、csv两种文件格式可以直接查看
- 不可以查看的导出文件,导出压缩格式的文件,占用磁盘空间比较小,适合做一些备份工作;现在支持的压缩格式TSFILE、SNAPPY、GZIP等
导出命令工具:data-export.bat/data-export.sh
-h // iotdb host address
-p // port
-u // username
-pw // password
-f // fileFolder
-i // 要导出的路径
-sy // 文件生成策略,1.以设备的路径为为文件名生成文件 2、额外提供一个文件来记录文件名与设备路径的对应关系,除了tsfile,其他格式适用
-se // 是否需要导出时间序列结构,如果是true的话,工具会额外导出一个文件来记录它对应的时间序列结构
-c // 压缩格式 : SQL、CSV、SNAPPY、GZIP、LZ4、TSFILE
-w // where 条件
-vn // virtualNum 虚拟存储组个数,导出tsfile格式适用
-pi // partitionInterval 时间分区间隔,导出tsfile格式适用
导入命令工具: data-import.bat/data-import.sh
-h // iotdb host address
-p // port
-u // username
-pw // password
-f // fileFolder
-se // 是否需要从记录时间序列结构的文件创建对应的时间序列,如果是true的话,创建时间序列
-c // 压缩格式 : SQL、CSV、SNAPPY、GZIP、LZ4
场景描述:
- 存储组 :
- root.ln.company1
- root.ln.company2
- 时间序列:
1.root.ln.company1.diggingMachine.d1.position
2.root.ln.company1.diggingMachine.d1.weight
3.root.ln.company1.diggingMachine.d2.position
4.root.ln.company1.diggingMachine.d2.weight
5.root.ln.company2.taxiFleet.team1.mileage
6.root.ln.company2.taxiFleet.team1.oilConsumption
存储组root.ln.company1 下有两台挖掘机d1、d2
存储组root.ln.company2 下有1个出租车队team1
导出d1设备,导出文件到d:/company1/machine,文件策略选择第二种(额外文件),需要生成时间序列结构,文件格式gzip
data-export.bat -h 127.0.0.1 -p 6667 -u root -pw root -f d:\\company1\\machine -i root.ln.company1.diggingMachine.d1 -sy true -se true -c gzip
导出结果:
TIMESERIES_STRUCTURE.STRUCTURE 记录时间序列结构
CATALOG_COMPRESS.CATALOG 记录文件名与设备路径的对应关系
1.gz.bin
导出company1下所有设备,导出文件到d:/company1/machine,文件策略选择第一种,不需要生成时间序列结构,文件格式csv
data-export.bat -h 127.0.0.1 -p 6667 -u root -pw root -f d:\\company1\\machine -i root.ln.company1.** -sy false -se false -c csv
导出结果:
d2.csv
d1.csv
导出root.ln下所有设备,导出文件到d:/all/devices,文件策略选择第一种,需要生成时间序列结构,文件格式csv
data-export.bat -h 127.0.0.1 -p 6667 -u root -pw root -f d:\\all\\devices -i root.ln.** -sy false -se true -c csv -w "time > 1651036025230"
导出结果:
TIMESERIES_STRUCTURE.STRUCTURE 记录时间序列结构
d2.csv
d1.csv
team1.csv
导入数据,指定导出数据的文件夹d:/all/devices,需要导入时间序列,文件格式csv
data-import.bat -h 127.0.0.1 -p 6667 -u root -pw root -f d:\\all\\devices -se true -c csv
ps: 导出 tsfile
data-export.bat -h 127.0.0.1 -p 6667 -u root -pw root -f d:\\tsfileexport\\A106 -i root.yyy.** -se false -c tsfile -vn 3 -pi 604800
如果你想导入tsfile文件,请使用 Load External TsFile Tool工具。