数据导出

1. 功能概述

IoTDB 支持两种方式进行数据导出:

  • 数据导出工具 :export-data.sh/bat 位于 tools 目录下,能够将指定 SQL 的查询结果导出为 CSV、SQL 及 TsFile (开源时间序列文件格式)格式。
  • 基于 PIPE 框架的 TsFileBackup:tsfile-backup.sh/bat位于 tools 目录下,能够使用 PIPE 将指定的数据文件导出为 TsFile 格式。

2. 数据导出工具

2.1 公共参数

参数缩写参数全称参数含义是否为必填项默认值
-ft--file_type导出文件的类型,可以选择:csv、sql、tsfile
-h-- host主机名127.0.0.1
-p--port端口号6667
-u--username用户名root
-pw--password密码,自 V2.0.9.1 起支持隐藏输入TimechoDB@2021 (V2.0.6 版本之前为 root)
-sql_dialect--sql_dialect选择 server 是树模型还是表模型,当前支持 tree 和 table 类型tree
-db--database​将要导出的目标数据库,只在-sql_dialect为 table 类型下生效。-sql_dialect为 table 时必填-
-table--table将要导出的目标表,只在-sql_dialect为 table 类型下生效。如果指定了-q参数则此参数不生效,如果导出类型为 tsfile/sql 则此参数必填。​ 否-
-start_time--start_time将要导出的数据起始时间,只有-sql_dialect为 table 类型时生效。如果填写了-q,则此参数不生效。支持的时间类型同-tf参数。-
-end_time--end_time将要导出的数据的终止时间,只有-sql_dialect为 table 类型时生效。如果填写了-q,则此参数不生效。-
-t--target指定输出文件的目标文件夹,如果路径不存在新建文件夹
-pfn--prefix_file_name指定导出文件的名称。例如:abc,生成的文件是abc_0.tsfile、abc_1.tsfiledump_0.tsfile
-q--query要执行的查询语句。自 V2.0.8 起,SQL 语句中的分号将被自动移除,查询执行保持正常。
-timeout--query_timeout会话查询的超时时间(ms)-1(V2.0.8 之前)
Long.MAX_VALUE(V2.0.8 及之后)
范围:-1~Long.MAX_VALUE
-help--help显示帮助信息
-usessl--use_ssl使用 SSL 协议,自 V2.0.9.1 起支持-
-ts--trust_store信任库。支持隐藏输入,自 V2.0.9.1 起支持-
-tpw--trust_store_password信任库密码。支持隐藏输入,自 V2.0.9.1 起支持-

2.2 CSV 格式

2.2.1 运行命令

# Unix/OS X
> tools/export-data.sh -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] 
                -t <target_directory> [-pfn <prefix_file_name>] [-dt <datatype>] [-lpf <lines_per_file>] [-tf <time_format>] 
               [-tz <timezone>] [-q <query_command>] [-timeout <query_timeout>]
# Windows
# V2.0.4.x 版本之前
> tools\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] 
                -t <target_directory> [-pfn <prefix_file_name>] [-dt <datatype>] [-lpf <lines_per_file>] [-tf <time_format>] 
               [-tz <timezone>] [-q <query_command>] [-timeout <query_timeout>]
               
# V2.0.4.x 版本及之后 
> tools\windows\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] 
                -t <target_directory> [-pfn <prefix_file_name>] [-dt <datatype>] [-lpf <lines_per_file>] [-tf <time_format>] 
               [-tz <timezone>] [-q <query_command>] [-timeout <query_timeout>]

2.2.2 私有参数

参数缩写参数全称参数含义是否为必填项默认值
-dt--datatype是否在 CSV 文件的表头输出时间序列的数据类型,可以选择truefalsefalse
-lpf--lines_per_file每个转储文件的行数10000
范围:0~Integer.Max=2147483647
-tf--time_format指定 CSV 文件中的时间格式。可以选择:1) 时间戳(数字、长整型);2) ISO8601(默认);3) 用户自定义模式,如yyyy-MM-dd HH:mm:ss(默认为ISO8601)。SQL 文件中的时间戳输出不受时间格式设置影响ISO8601
-tz--timezone设置时区,例如+08:00-01:00本机系统时间

2.2.3 运行示例:

# 正确示例
> export-data.sh -ft csv -sql_dialect table -t /path/export/dir -db database1 -q "select * from table1"

# 异常示例
> export-data.sh -ft csv -sql_dialect table -t /path/export/dir -q "select * from table1"
Parse error: Missing required option: db

2.3 SQL 格式

2.3.1 运行命令

# Unix/OS X
> tools/export-data.sh -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>] 
          -t <target_directory> [-pfn <prefix_file_name>] [-aligned <export aligned insert sql>]
          -lpf <lines_per_file> - [-tf <time_format>] [-tz <timezone>] [-q <query_command>] [-timeout <query_timeout>]
      
# Windows
# V2.0.4.x 版本之前
> tools\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host> -p <port> -u <username> -pw <password>] 
          -t <target_directory> [-pfn <prefix_file_name>  -aligned <export aligned insert sql>  
          -lpf <lines_per_file> -tf <time_format> -tz <timezone> -q <query_command> -timeout <query_timeout>]
          
# V2.0.4.x 版本及之后  
> tools\windows\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host> -p <port> -u <username> -pw <password>] 
          -t <target_directory> [-pfn <prefix_file_name>  -aligned <export aligned insert sql>  
          -lpf <lines_per_file> -tf <time_format> -tz <timezone> -q <query_command> -timeout <query_timeout>]

2.3.2 私有参数

参数缩写参数全称参数含义是否为必填项默认值
-aligned--use_aligned是否导出为对齐的 SQL 格式true
-lpf--lines_per_file每个转储文件的行数10000
范围:0~Integer.Max=2147483647
-tf--time_format指定 CSV 文件中的时间格式。可以选择:1) 时间戳(数字、长整型);2) ISO8601(默认);3) 用户自定义模式,如yyyy-MM-dd HH:mm:ss(默认为ISO8601)。SQL 文件中的时间戳输出不受时间格式设置影响ISO8601
-tz--timezone设置时区,例如+08:00-01:00本机系统时间

2.3.3 运行示例:

# 正确示例
> export-data.sh -ft sql -sql_dialect table -t /path/export/dir -db database1 -start_time 1

# 异常示例
> export-data.sh -ft sql -sql_dialect table -t /path/export/dir -start_time 1
Parse error: Missing required option: db

2.4 TsFile 格式

2.4.1 运行命令

# Unix/OS X
> tools/export-data.sh -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>]
        -t <target_directory> [-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>]
      
# Windows
# V2.0.4.x 版本之前
> tools\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>]
        -t <target_directory> [-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>]
        
# V2.0.4.x 版本及之后 
> tools\windows\export-data.bat -ft<format> [-sql_dialect<sql_dialect>] -db<database> -table<table>  
                [-start_time<start_time>] [-end_time<end_time>] [-h <host>] [-p <port>] [-u <username>] [-pw <password>]
        -t <target_directory> [-pfn <prefix_file_name>] [-q <query_command>] [-timeout <query_timeout>]

2.4.2 私有参数

2.4.3 运行示例:

# 正确示例
> /tools/export-data.sh -ft tsfile -sql_dialect table -t /path/export/dir -db database1 -start_time 0

# 异常示例
> /tools/export-data.sh -ft tsfile -sql_dialect table -t /path/export/dir -start_time 0
Parse error: Missing required option: db

3. 基于 PIPE 框架的 TsFileBackup

IoTDB 自 V2.0.9.2 版本起支持 tsfile-backup.sh/bat 脚本,该脚本能够自动生成并向服务端发送 CREATE PIPE SQL 指令,将指定的数据文件导出为 TsFile 格式。

注意:

  1. 使用该脚本需联系天谋团队获取相关的 jar 包(tsfile-remote-sink-<version>-jar-with-dependencies.jar),并放至 IoTDB 可访问的路径(例如所有数据节点主机)。
  2. 该脚本支持 Object 类型数据导出为 TsFile 文件。

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 和关联的 Object 目录将导出至此。-
-db--database数据库名称 (表模型可选).*
-table--table表名 (表模型可选).*
-s--start_time起始时间。支持 ISO8601 格式(如 2026-01-01T00:00:00)或毫秒时间戳。仅导出该时间点及之后的数据。-
-e--end_time截止时间。格式同上。仅导出该时间点之前的数据。-
-th--target_host远程目标主机 IP,默认自动识别启动脚本的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 运行示例

示例一:SCP 远程导出(将数据发送到另一台服务器)

./tsfile-backup.sh -sql_dialect table -db test_db -t /remote/archive/ -th 192.168.1.100 -tu backup_user -tpw ComplexPass123!

示例二:带限速的远程 Object 数据导出

./tsfile-backup.sh -sql_dialect table -t /mnt/backup/ -th 10.0.0.5 -tu iot_admin -tpw Admin@2026 --rate_limit 5242880

示例三:指定 Pipe jar 目录

./tsfile-backup.sh -sql_dialect table -db test  -table .* -tu luoluoyuyu -tpw  -t /tmp/backup --plugin_jar /local/lib/tsfile-remote-sink-2.0.8-SNAPSHOT-jar-with-dependencies.jar