数据导出
数据导出
1. 功能概述
IoTDB 支持两种方式进行数据导出:
数据导出工具:
export-data.sh/bat位于tools目录下,能够将指定 SQL 的查询结果导出为 CSV、SQL 及 TsFile(开源时间序列文件格式)格式。基于 PIPE 框架的 TsFileBackup:
tsfile-backup.sh/bat位于tools目录下,能够使用 PIPE 将指定的数据文件导出为 TsFile 格式。
| 文件格式 | IoTDB工具 | 具体介绍 |
|---|---|---|
| CSV | export-data.sh/bat | 纯文本格式,存储格式化数据,需按照下文指定 CSV 格式进行构造 |
| SQL | 包含自定义 SQL 语句的文件 | |
| TsFile | 开源时序数据文件格式 | |
| tsfile-backup.sh/bat | 开源时序数据文件格式 |
2. 数据导出工具
2.1 公共参数
| 参数缩写 | 参数全称 | 参数含义 | 是否必填 | 默认值 |
|---|---|---|---|---|
-ft | --file_type | 导出格式:csv、sql 或 tsfile | 是 | - |
-sql_dialect | --sql_dialect | 选择模型:tree 或 table;使用树模型时可以省略该参数。 | 否 | tree |
-h | --host | 服务地址 | 否 | 127.0.0.1 |
-p | --port | RPC 端口 | 否 | 6667 |
-u | --username | 用户名 | 否 | root |
-pw | --password | 密码;只写 -pw 而不跟值时交互式隐藏输入 | 否 | TimechoDB@2021 |
-t | --target | 输出目录;目录不存在时自动创建 | 是 | - |
-pfn | --prefix_file_name | 指定导出文件的前缀名。例如:abc,生成的文件是 abc_0.tsfile、abc_1.tsfile | 否 | dump_0.tsfile |
-q | --query | 查询语句;省略时交互输入,可用分号分隔多条树模型查询 | 否 | 无 |
-timeout | --query_timeout | 查询超时时间,单位为毫秒 | 否 | Long.MAX_VALUE |
-mfs | --rpc_max_frame_size | RPC 最大帧大小,单位为字节 | 否 | 536870912 |
-help | --help | 查看指定格式帮助,例如 -help csv | 否 | - |
-usessl | --use_ssl | 是否启用 SSL,必须跟随布尔值 true 或 false;启用 SSL 时写成 -usessl true。 | 否 | - |
-ts | --trust_store | TrustStore 路径 | 否 | - |
-tpw | --trust_store_password | TrustStore 密码,支持隐藏输入 | 否 | - |
-ks | --key_store | 双向 TLS 使用的 KeyStore 路径 | 否 | - |
-kpw | --key_store_password | KeyStore 密码 | 否 | - |
-ssl_protocol | --ssl_protocol | SSL/TLS 协议 | 否 | - |
2.2 CSV 格式
CSV 适合离线分析、报表、审计以及与 Excel、Python、Spark 等工具交换数据。它可以导出原始查询结果,也支持聚合查询。
2.2.1 运行命令
# Unix/OS X
tools/export-data.sh -ft csv [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] \
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] \
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> \
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] \
[-dt <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]
# Windows(V2.0.4.x 之前)
tools\export-data.bat -ft csv [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] ^
[-dt <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]
# Windows(V2.0.4.x 及之后)
tools\windows\export-data.bat -ft csv [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] ^
[-dt <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]2.2.2 私有参数
| 参数缩写 | 参数全称 | 参数含义 | 是否为必填项 | 默认值 |
|---|---|---|---|---|
-dt | --datatype | 是否在表头输出时间序列数据类型,可以选择true或false | 否 | false |
-lpf | --lines_per_file | 每个文件的数据行数,超过后自动分片。范围:0~Integer.Max。 | 否 | 10000 |
-tf | --time_format | 时间格式:timestamp、number、long或自定义格式。 | 否 | ISO8601 |
-tz | --timezone | 会话时区,例如 +08:00 或 -01:00 | 否 | 本机时区 |
关于时间格式输出的补充说明:-tf 只影响 CSV 文件的 Time 列。以下示例中的时间均以 +08:00 时区为准。
-tf 值 | Time 列输出格式 | 示例 |
|---|---|---|
timestamp | 十进制毫秒时间戳 | 1767225600000 |
number | 十进制毫秒时间戳 | 1767225600000 |
long | 十进制毫秒时间戳 | 1767225600000 |
省略 -tf(默认 ISO8601) | ISO 8601,包含毫秒和时区偏移 | 2026-01-01T08:00:00.000+08:00 |
自定义格式 yyyy-MM-dd HH:mm:ss | 按指定模式格式化的本地日期时间 | 2026-01-01 08:00:00 |
2.2.3 运行示例
# 正确示例
> tools/export-data.sh -ft csv -h 127.0.0.1 -p 6667 -u root -pw -t /path/export/dir
-pfn exported-data.csv -dt true -lpf 1000 -tf "yyyy-MM-dd HH:mm:ss"
-tz +08:00 -q "SELECT * FROM root.ln" -timeout 20000
# 异常示例
> tools/export-data.sh -ft csv -h 127.0.0.1 -p 6667 -u root -pw
Parse error: Missing required option: t
# 注意:V2.0.6.x 版本之前 -pw 参数值默认值为 root2.3 SQL 格式
SQL 格式会把查询结果中的每行数据转换为一条 INSERT 写入语句。将导出的 SQL 文件提交到结构兼容的目标数据库执行,即可重新写入这些数据,因此适合小规模数据迁移、数据修复和人工审计。
2.3.1 运行命令
# Unix/OS X
tools/export-data.sh -ft sql [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] \
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] \
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> \
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] \
[-aligned <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]
# Windows(V2.0.4.x 之前)
tools\export-data.bat -ft sql [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] ^
[-aligned <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]
# Windows(V2.0.4.x 及之后)
tools\windows\export-data.bat -ft sql [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>] ^
[-aligned <true|false>] [-lpf <lines_per_file>] [-tf <time_format>] [-tz <timezone>]2.3.2 私有参数
| 参数缩写 | 参数全称 | 参数含义 | 是否为必填项 | 默认值 |
|---|---|---|---|---|
-lpf | --lines_per_file | 每个 SQL 文件包含的 INSERT 行数 | 否 | 10000 |
-aligned | --use_aligned | 兼容参数;当前实现不依据该值决定是否生成对齐写入语句 | 否 | true |
-tf | --time_format | SQL 文件始终输出数值时间戳,该参数不会改变 SQL 中的时间格式 | 否 | ISO8601 |
-tz | --timezone | 查询会话时区 | 否 | 本机时区 |
2.3.3 运行示例
# 正确示例
> tools/export-data.sh -ft sql -h 127.0.0.1 -p 6667 -u root -pw -t /path/export/dir
-pfn exported-data.csv -aligned true -lpf 1000 -tf "yyyy-MM-dd HH:mm:ss"
-tz +08:00 -q "SELECT * FROM root.ln" -timeout 20000
# 异常示例
> tools/export-data.sh -ft sql -h 127.0.0.1 -p 6667 -u root -pw
Parse error: Missing required option: t
# 注意:V2.0.6.x 版本之前 -pw 参数值默认值为 root2.4 TsFile 格式
TsFile 适合大数据量迁移和归档。与 CSV、SQL 相比,它能够保留时间序列的数据类型、编码、压缩方式和设备对齐状态。
2.4.1 运行命令
# Unix/OS X
tools/export-data.sh -ft tsfile [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] \
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] \
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> \
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>]
# Windows(V2.0.4.x 之前)
tools\export-data.bat -ft tsfile [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>]
# Windows(V2.0.4.x 及之后)
tools\windows\export-data.bat -ft tsfile [-sql_dialect tree] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] ^
[-usessl <true|false>] [-ts <trust_store>] [-tpw <trust_store_password>] [-ks <key_store>] ^
[-kpw <key_store_password>] [-ssl_protocol <ssl_protocol>] -t <target_directory> ^
[-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>] [-mfs <rpc_max_frame_size>]2.4.2 私有参数
- 无
2.4.3 运行示例
# 正确示例
> tools/export-data.sh -ft tsfile -h 127.0.0.1 -p 6667 -u root -pw -t /path/export/dir
-pfn export-data.tsfile -q "SELECT * FROM root.ln.**" -timeout 10000
# 异常示例
> tools/export-data.sh -ft tsfile -h 127.0.0.1 -p 6667 -u root -pw
Parse error: Missing required option: t
# 注意:V2.0.6.x 版本之前 -pw 参数值默认值为 root2.5 场景示例
2.5.1 场景选择
| 需求 | 推荐方式 | 查询特点 | 输出结果 |
|---|---|---|---|
| 按设备和时间范围查看、分析或交换原始数据 | CSV | 普通明细查询,在 WHERE 中指定时间范围 | 可直接由 Excel、Python、Spark 等工具读取 |
| 将多个设备整理为统一的设备视图 | CSV | 查询末尾增加 ALIGN BY DEVICE | 结果包含 Device 列,便于按设备比较 |
| 生成分时间窗口的统计报表 | CSV | 使用聚合函数和 GROUP BY 时间窗口 | 每个时间窗口生成一行统计结果 |
| 迁移、修复或审计非对齐设备的小批量数据 | SQL | 查询非对齐设备的原始数据 | 生成普通 INSERT 语句 |
| 迁移对齐设备的小批量数据 | SQL | 使用 ALIGN BY DEVICE 查询对齐设备 | 生成带 ALIGNED 的 INSERT 语句 |
| 大批量迁移或离线归档,并保留序列属性和设备对齐状态 | TsFile | 查询真实时间序列的非聚合原始数据 | 生成二进制 TsFile 文件 |
| 一次导出多个查询并控制单个文件大小 | CSV、SQL 或 TsFile | 在 -q 中使用分号分隔查询,并按需使用 -lpf | 按查询序号和分片序号生成多个文件 |
2.5.2 准备数据
d1 使用普通时间序列,d2 使用对齐时间序列。
CREATE DATABASE root.export_demo;
CREATE TIMESERIES root.export_demo.line1.d1.temperature FLOAT ENCODING=RLE COMPRESSOR=SNAPPY;
CREATE TIMESERIES root.export_demo.line1.d1.status BOOLEAN ENCODING=PLAIN COMPRESSOR=SNAPPY;
CREATE TIMESERIES root.export_demo.line1.d1.remark TEXT ENCODING=PLAIN COMPRESSOR=SNAPPY;
CREATE ALIGNED TIMESERIES root.export_demo.line1.d2(
temperature FLOAT ENCODING=RLE COMPRESSOR=SNAPPY,
status BOOLEAN ENCODING=PLAIN COMPRESSOR=SNAPPY,
remark TEXT ENCODING=PLAIN COMPRESSOR=SNAPPY
);
INSERT INTO root.export_demo.line1.d1(timestamp,temperature,status,remark)
VALUES(1767225600000,72.5,true,'normal');
INSERT INTO root.export_demo.line1.d1(timestamp,temperature,status,remark)
VALUES(1767225660000,75.0,true,'normal');
INSERT INTO root.export_demo.line1.d1(timestamp,temperature,status,remark)
VALUES(1767225720000,81.5,false,'high_temperature');
INSERT INTO root.export_demo.line1.d1(timestamp,temperature,status,remark)
VALUES(1767225780000,79.0,true,'recovered');
INSERT INTO root.export_demo.line1.d1(timestamp,temperature,status,remark)
VALUES(1767225840000,83.0,false,'high_temperature');
INSERT INTO root.export_demo.line1.d2(timestamp,temperature,status,remark)
ALIGNED VALUES(1767225600000,70.0,true,'normal');
INSERT INTO root.export_demo.line1.d2(timestamp,temperature,status,remark)
ALIGNED VALUES(1767225660000,71.5,true,'normal');
INSERT INTO root.export_demo.line1.d2(timestamp,temperature,status,remark)
ALIGNED VALUES(1767225720000,73.0,true,'normal');
INSERT INTO root.export_demo.line1.d2(timestamp,temperature,status,remark)
ALIGNED VALUES(1767225780000,76.5,true,'warming');
INSERT INTO root.export_demo.line1.d2(timestamp,temperature,status,remark)
ALIGNED VALUES(1767225840000,78.0,false,'inspection');执行以下查询可以查看本节使用的全部原始数据:
SELECT temperature, status, remark FROM root.export_demo.line1.* ALIGN BY DEVICE;查询结果如下,共 10 行:
| Time | Device | temperature | status | remark |
|---|---|---|---|---|
| 2026-01-01T08:00:00.000+08:00 | root.export_demo.line1.d1 | 72.5 | true | normal |
| 2026-01-01T08:01:00.000+08:00 | root.export_demo.line1.d1 | 75.0 | true | normal |
| 2026-01-01T08:02:00.000+08:00 | root.export_demo.line1.d1 | 81.5 | false | high_temperature |
| 2026-01-01T08:03:00.000+08:00 | root.export_demo.line1.d1 | 79.0 | true | recovered |
| 2026-01-01T08:04:00.000+08:00 | root.export_demo.line1.d1 | 83.0 | false | high_temperature |
| 2026-01-01T08:00:00.000+08:00 | root.export_demo.line1.d2 | 70.0 | true | normal |
| 2026-01-01T08:01:00.000+08:00 | root.export_demo.line1.d2 | 71.5 | true | normal |
| 2026-01-01T08:02:00.000+08:00 | root.export_demo.line1.d2 | 73.0 | true | normal |
| 2026-01-01T08:03:00.000+08:00 | root.export_demo.line1.d2 | 76.5 | true | warming |
| 2026-01-01T08:04:00.000+08:00 | root.export_demo.line1.d2 | 78.0 | false | inspection |
2.5.3 指定时间范围 CSV 导出
需要提取某个设备在指定时间范围内的原始数据,供分析工具读取时,使用 CSV。树模型的时间范围直接写在查询中。
tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft csv -t /export_demo/csv_raw -pfn d1_range ^
-q "select temperature,status,remark from root.export_demo.line1.d1 where time >= 1767225660000 and time <= 1767225780000" ^
-timeout 20000控制台输出 Export completely!,并在目标路径生成 /export_demo/csv_raw/d1_range0_0.csv,内容如下:
Time,root.export_demo.line1.d1.temperature,root.export_demo.line1.d1.status,root.export_demo.line1.d1.remark
2026-01-01T08:01:00.000+08:00,75.0,true,"normal"
2026-01-01T08:02:00.000+08:00,81.5,false,"high_temperature"
2026-01-01T08:03:00.000+08:00,79.0,true,"recovered"2.5.4 设备对齐 CSV 导出
需要把多个设备整理为统一列结构,并通过 Device 列区分设备时,在查询末尾增加 ALIGN BY DEVICE。
tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft csv -t /export_demo/csv_aligned -pfn devices ^
-q "select temperature,status,remark from root.export_demo.line1.* align by device" ^
-timeout 20000控制台输出 Export completely!,生成 /export_demo/csv_aligneddevices0_0.csv,内容如下:
Time,Device,temperature,status,remark
2026-01-01T08:00:00.000+08:00,root.export_demo.line1.d1,72.5,true,"normal"
2026-01-01T08:01:00.000+08:00,root.export_demo.line1.d1,75.0,true,"normal"
2026-01-01T08:02:00.000+08:00,root.export_demo.line1.d1,81.5,false,"high_temperature"
2026-01-01T08:03:00.000+08:00,root.export_demo.line1.d1,79.0,true,"recovered"
2026-01-01T08:04:00.000+08:00,root.export_demo.line1.d1,83.0,false,"high_temperature"
2026-01-01T08:00:00.000+08:00,root.export_demo.line1.d2,70.0,true,"normal"
2026-01-01T08:01:00.000+08:00,root.export_demo.line1.d2,71.5,true,"normal"
2026-01-01T08:02:00.000+08:00,root.export_demo.line1.d2,73.0,true,"normal"
2026-01-01T08:03:00.000+08:00,root.export_demo.line1.d2,76.5,true,"warming"
2026-01-01T08:04:00.000+08:00,root.export_demo.line1.d2,78.0,false,"inspection"2.5.5 聚合报表 CSV 导出
需要生成统计报表时,可以使用 CSV 导出聚合查询。下面按 2 分钟统计两个设备的温度数据量和平均值。聚合查询包含时间窗口,结果第一列为窗口起始时间。
/tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft csv -t /export_demo/csv_aggregate -pfn temperature_by_2m ^
-q "select count(temperature),avg(temperature) from root.export_demo.line1.* group by ([1767225600000,1767225900000), 2m)" ^
-timeout 20000控制台输出 Export completely!,生成 /export_demo/csv_aggregate/temperature_by_2m0_0.csv,内容如下:
Time,count(root.export_demo.line1.d1.temperature),count(root.export_demo.line1.d2.temperature),avg(root.export_demo.line1.d1.temperature),avg(root.export_demo.line1.d2.temperature)
2026-01-01T08:00:00.000+08:00,2,2,73.75,70.75
2026-01-01T08:02:00.000+08:00,2,2,80.25,74.75
2026-01-01T08:04:00.000+08:00,1,1,83.0,78.02.5.6 非对齐设备 SQL 导出
需要进行小规模逻辑迁移、数据修复或人工审计时,可以把非对齐设备的原始数据导出为普通 INSERT 语句。目标端需要提前创建相同的数据库和时间序列。
/tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft sql -t /export_demo/sql_raw -pfn d1_range ^
-q "select temperature,status,remark from root.export_demo.line1.d1 where time >= 1767225660000 and time <= 1767225780000" ^
-timeout 20000控制台输出 Export completely!,生成 /export_demo/sql_raw/d1_range0_0.sql,内容如下:
INSERT INTO root.export_demo.line1.d1(TIMESTAMP,temperature,status,remark) VALUES (1767225660000,75.0,true,"normal");
INSERT INTO root.export_demo.line1.d1(TIMESTAMP,temperature,status,remark) VALUES (1767225720000,81.5,false,"high_temperature");
INSERT INTO root.export_demo.line1.d1(TIMESTAMP,temperature,status,remark) VALUES (1767225780000,79.0,true,"recovered");2.5.7 对齐设备 SQL 导出
需要迁移对齐设备时,在查询中使用 ALIGN BY DEVICE。工具根据结果中的 Device 列生成带 ALIGNED 的 INSERT 语句。
/tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft sql -t /export_demo/sql_aligned -pfn d2_aligned ^
-q "select temperature,status,remark from root.export_demo.line1.d2 align by device" ^
-timeout 20000控制台输出 Export completely!,生成 /export_demo/sql_aligned/d2_aligned0_0.sql,内容如下:
INSERT INTO root.export_demo.line1.d2(TIMESTAMP,temperature,status,remark) ALIGNED VALUES (1767225600000,70.0,true,"normal");
INSERT INTO root.export_demo.line1.d2(TIMESTAMP,temperature,status,remark) ALIGNED VALUES (1767225660000,71.5,true,"normal");
INSERT INTO root.export_demo.line1.d2(TIMESTAMP,temperature,status,remark) ALIGNED VALUES (1767225720000,73.0,true,"normal");
INSERT INTO root.export_demo.line1.d2(TIMESTAMP,temperature,status,remark) ALIGNED VALUES (1767225780000,76.5,true,"warming");
INSERT INTO root.export_demo.line1.d2(TIMESTAMP,temperature,status,remark) ALIGNED VALUES (1767225840000,78.0,false,"inspection");2.5.8 TsFile 迁移归档
需要批量迁移或离线归档,并保留时间序列的数据类型、编码、压缩方式以及设备对齐状态时,使用 TsFile。下面一次导出 root.export_demo 下两个设备的全部原始数据。
/tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft tsfile -t /export_demo/tsfile -pfn export_demo ^
-q "select * from root.export_demo.**" ^
-timeout 20000控制台输出 Export completely!,生成 /export_demo/tsfile/export_demo0.tsfile。TsFile 是二进制文件,不能像 CSV 或 SQL 一样直接展示数据行。
2.5.9 多查询分片 CSV 导出
需要在一次命令中导出多个设备,并限制每个 CSV 文件的数据行数时,可以在 -q 中使用分号分隔查询,再通过 -lpf 设置每个文件的行数。下面将两个设备的温度数据分别导出,每个文件最多包含 2 行数据。
/tools/export-data.sh ^
-sql_dialect tree -h 127.0.0.1 -p 6667 -u root ^
-ft csv -t /export_demo/csv_multi_split -pfn multi -lpf 2 ^
-q "select temperature from root.export_demo.line1.d1;select temperature from root.export_demo.line1.d2" ^
-timeout 20000控制台对两条查询均输出 Export completely!,共生成 6 个文件。文件名中的第一个数字是查询序号,第二个数字是分片序号。
| 文件 | 大小 | 数据行数 | 内容范围 |
|---|---|---|---|
multi0_0.csv | 116 字节 | 2 | d1 第 1~2 行 |
multi0_1.csv | 116 字节 | 2 | d1 第 3~4 行 |
multi0_2.csv | 80 字节 | 1 | d1 第 5 行 |
multi1_0.csv | 116 字节 | 2 | d2 第 1~2 行 |
multi1_1.csv | 116 字节 | 2 | d2 第 3~4 行 |
multi1_2.csv | 80 字节 | 1 | d2 第 5 行 |
例如,multi0_0.csv 内容为:
Time,root.export_demo.line1.d1.temperature
2026-01-01T08:00:00.000+08:00,72.5
2026-01-01T08:01:00.000+08:00,75.03. 基于 PIPE 框架的 TsFileBackup
IoTDB 自 V2.0.9.2 版本起支持 tsfile-backup.sh/bat 脚本,该脚本能够自动生成并向服务端发送 CREATE PIPE SQL 指令,将指定的数据文件导出为 TsFile 格式。
注意: 使用该脚本需联系天谋团队获取相关的 jar 包(tsfile-remote-sink-<version>-jar-with-dependencies.jar),并放至 IoTDB 可访问的路径(例如所有数据节点主机)。
3.1 运行命令
# Unix/OS X
> tools/tsfile-backup.sh [-sql_dialect <sql_dialect>] [-h <host>] [-p <port>]
[-u <username>] [-pw <password>] [-path <path>] [-db <db>] [-table
<table>] [-s <start_time>] [-e <end_time>] [-t <target_directory>]
[-th <target_host>] [-tu <target_host_user>] [-tp <target_host_port>]
[--rate_limit] [--plugin_jar] [-help]
# Windows
> tools\windows\tsfile-backup.bat [-sql_dialect <sql_dialect>] [-h <host>] [-p <port>]
[-u <username>] [-pw <password>] [-path <path>] [-db <db>] [-table
<table>] [-s <start_time>] [-e <end_time>] [-t <target_directory>]
[-th <target_host>] [-tu <target_host_user>] [-tp <target_host_port>]
[--rate_limit] [--plugin_jar] [-help]3.2 脚本参数
| 参数缩写 | 参数全称 | 参数含义 | 是否为必填项 | 默认值 |
|---|---|---|---|---|
-sql_dialect | --sql_dialect | 指定数据模型类型,可选值:tree(树模型)或 table(表模型)。 | 是 | - |
-h | --host | 本地主机地址,指当前数据所在的 IoTDB 实例 IP。 | 否 | 127.0.0.1 |
-p | --port | 端口号,IoTDB RPC 服务端口。 | 否 | 6667 |
-u | --user | 用户名,用于登录 IoTDB 验证。 | 否 | root |
-pw | --password | 密码,对应用户的 IoTDB 密码,支持隐藏输入。 | 否 | root |
-t | --target | 导出目标目录。在 SCP 模式下,此路径指远程服务器上的绝对物理路径。TsFile 将导出至此。 | 是 | - |
-db | --database | 数据库名称(表模型可选)。 | 否 | .* |
-table | --table | 表名(表模型可选)。 | 否 | .* |
-s | --start_time | 起始时间。支持 ISO8601 格式(如 2026-01-01T00:00:00)或毫秒时间戳。仅导出该时间点及之后的数据。 | 否 | - |
-e | --end_time | 截止时间。格式同上。仅导出该时间点之前的数据。 | 否 | - |
-th | --target_host | 远程目标主机 IP。指定此参数后,脚本将自动配置 Pipe 使用 SCP 模式进行数据传输。 | 否 | - |
-tu | --target_host_user | 远程主机用户名,用于 SSH/SCP 登录目标服务器。 | 否 | - |
-tpw | --target_host_pw | 远程主机密码,用于远程身份验证,支持隐藏输入。 | 否 | - |
-tp | --target_host_port | 远程 SSH 端口。 | 否 | 22 |
--rate_limit | --rate_limit | 发送速率限制,单位为字节/秒(Bytes/s),防止导出任务占用过多网络带宽。 | 否 | - |
--plugin_jar | --plugin_jar | 指定 Pipe 插件的 Jar 包路径。 | 否 | - |
-help | --help | 查看帮助。 | 否 | - |
3.3 运行示例
- 示例一:将树模型指定路径的数据远程导出(
-tpw不跟值时隐藏输入密码)
./tsfile-backup.sh -sql_dialect tree -path root.factory.** -t /remote/archive/ \
-th 192.168.1.100 -tu backup_user -tpw- 示例二:指定 Pipe 插件 Jar
./tsfile-backup.sh -sql_dialect tree -path root.factory.** -t /tmp/backup \
--plugin_jar /local/lib/tsfile-remote-sink-<version>-jar-with-dependencies.jar